加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 哪个方法更好地获得64位整数的低32位

发布时间:2020-12-16 05:45:39 所属栏目:百科 来源:网络整理
导读:我发现在一些答案他们建议使用 lower =(some_var 32) 32; 但是我测试并发现以下更快: lower = some_var为0xffffffff; 那么哪个更好?在某些情况下,前者更安全吗? 解决方法 用更好: 对于有符号和无符号的some_var是可靠的,而位移正负数产生实现定义的结果
我发现在一些答案他们建议使用

lower =(some_var< 32)> 32;

但是我测试并发现以下更快:

lower = some_var&为0xffffffff;

那么哪个更好?在某些情况下,前者更安全吗?

解决方法

用&更好:

>&对于有符号和无符号的some_var是可靠的,而位移正负数产生实现定义的结果:

The value of E1 >> E2 is E1 right-shifted E2 bit positions. […] If E1 has a signed type and a negative value,the resulting value is implementation-defined.

>在我所知道的每个CPU(Z80,6502C,x86,68000,UltraSparc)上,按位和AND是一个单CPU指令,需要一个时钟周期…它不太可能变慢或者占用更多字节的机器码而不是你提到的位移方法,尽管编译器可能会将其优化为按位AND.

屏蔽的一个缺点是,相对容易意外地有7或9个F,而32中的错字是显而易见的:有其他方法可以生成掩蔽值,(1LL <32)-1,或者黑客,但是优雅的uint32_t(-1). 当然,如果uint32_t和some_var uint64_t更低,你可以让转换是隐式的,所以优化器甚至不需要实现按位,AND可以在赋值之前删除,但是这可能会给你一个编译器警告,你可以沉默阿拉

uint32_t lower = static_cast<uint32_t>(some_var);

当分配给另一个uint64_t时,或掩码不适用于所有32个最低有效位时,掩码主要是有用的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读