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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/10km/article/details/49122651
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
————————————————
版权声明:本文为CSDN博主「10km」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/10km/article/details/49122651

你可能感兴趣的:(linux,内核)