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 <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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值