msc和gcc编译器都提供了丰富的内置函数,虽然函数名各有不同,但总是有不少共通的内容,对于跨平台开发非常有用,善用这些函数,可以提高程序的效率同时也减少开发工作量。 msc的内置函数叫Compiler Intrinsics,相关文档在这里 Compiler Intrinsics(点击打开链接) gcc的内置函数叫Built-in Functions,相关的文档在这里Built-in Functions(点击打开链接)
下面的代码分别用msc和gcc的内置函数实现对32位和64位数字进行逆向位扫描, 返回最高位为1的位置(0-31或0-63), 如果输入参数为0,则返回-1
代码语言:javascript复制#ifdef _MSC_VER
#include <intrin.h>//需要加入这个头文件
//msc 编译时使用内建函数(Compiler Intrinsics)
inline __int8 _bsr_int64_(unsigned __int64 num) {
unsigned long index;
return _BitScanReverse64(&index, mask)?index:-1;
}
inline __int8 _bsr_int32_(unsigned __int32 num) {
unsigned long index;
return _BitScanReverse32(&index, mask)?index:-1;
}
#elif __GNUC__
//gcc 编译时使用内建函数(Built-in Functions)
inline __int8 _bsr_int64_(unsigned __int64 num) {
return num==0?-1:(sizeof(num)<<3)-1-__builtin_clzll(num);
//clzll返回64位数前导为0的个数,比如1返回63(前面有63个0)
}
inline __int8 _bsr_int32_(unsigned __int32 num) {
return num==0?-1:(sizeof(num)<<3)-1-__builtin_clz(num);
//clz返回32位数前导为0的个数,比如2返回30(前面有30个0)
}
#endif