msc和gcc编译器的内置函数(Compiler Intrinsics/Built-in Functions)

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

#ifdef _MSC_VER
#include //需要加入这个头文件
//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

你可能感兴趣的:(开发工具)