写作的好处(1 << 24 - 1)而不是FFFFFF?

dro*_*lex 7 c

我在C中有一段代码,内容如下:

a = b & ((1<<24) - 1);
Run Code Online (Sandbox Code Playgroud)

如果我没有误会,这相当于:

a = b & 0xFFFFFF;
Run Code Online (Sandbox Code Playgroud)

写第一个在性能方面有什么好处?对我来说,阅读起来比较复杂,但我想那个写过的人有比我更好的C背景.

谢谢

Tom*_*mas 14

由于编译器将为您执行计算,因此性能没有差异.

第一个选项可用于明确说明您使用的是24个设置位.这在第二个选项中更难计算.


NPE*_*NPE 8

很可能,没有任何性能差异,因为编译器会发现它((1<<24) - 1)是一个常量表达式,并将在编译时对其进行评估.

我们只能推测为什么代码的原作者选择以他们的方式编写它.也许他们认为它更好地表达了意图("掩盖除了24个最不重要的部分之外的所有部分b").

如果这是他们的推理,我个人倾向于同意他们.

  • 它需要能够做出这个决定,因为知道什么是常量表达式对于静态存储持续时间对象的初始化是必不可少的.编译器必须在运行时选择评估此表达式是非常糟糕的. (3认同)