和全位?

use*_*033 2 c c++ bit-manipulation

我最近一直在阅读一些代码,并遇到了一些问题:

somevar &= 0xFFFFFFFF;
Run Code Online (Sandbox Code Playgroud)

所有位都打开的东西有什么意义; 它到底是不是只等于somevar?

Jas*_*n S 15

"somevar"可以是64位变量,因此该代码将提取底部的32位.

编辑:如果它是一个32位变量,我可以想到其他原因,但它们更加模糊:

  • 常量0xFFFFFFFF是自动生成的代码
  • 有人试图欺骗编译器以防止某些事情被优化
  • 有人故意要求无操作线在调试期间在那里设置断点.


Nol*_*rin 5

实际上,如果somevar是类型int(32位整数),这将没有意义.但是,如果它是类型long(64位整数),那么这将掩盖值的上半部分(最重要的).

注意,long值不保证是64位,但通常在32位计算机上.

  • 你不能假设int是32位,也不是64位.(也许你理解这一点,只是懒惰的措辞让你的回答暗示这些是正确的吗?) (2认同)