前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >msc和gcc编译器的内置函数(Compiler Intrinsics/Built-in Functions)

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

作者头像
10km
发布2022-05-07 09:59:49
3470
发布2022-05-07 09:59:49
举报
文章被收录于专栏:10km的专栏

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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档