这个C / C ++表达式意味着什么

时间:2014-04-08 20:09:10

标签: c++ c

我正在阅读Objective-C中的教程,但它使用了C / C ++的一些东西。我有这行代码:

 static const uint32_t projectileCategory     =  0x1 << 1;

所以我想知道为什么变量等于2,如果我可以把它写成

 static const uint32_t projectileCategory     =  0x2;

谢谢!

4 个答案:

答案 0 :(得分:4)

这称为左bit shift,它是一个按位运算,相当于你的第二个例子。

0x1 << 1将值0x1 1的位向左移动,产生两个。

0x1: 00000001
0x2: 00000010   <- product of 0x1 << 1
0x4: 00000100   <- product of 0x1 << 2 

答案 1 :(得分:3)

他们是一样的,正如其他人所说的那样。但有时如果你有许多常量对应于位域中的位,你会看到它是用位移来写的,以澄清它对应的位。原始代码中的间距似乎表明它是更大的定义集的一部分。例如:

static const uint32_t projectileCategory     =  0x1 << 1;// bit 1
static const uint32_t doodadCategory         =  0x1 << 2;// bit 2
static const uint32_t playerCategory         =  0x1 << 3;// bit 3
static const uint32_t doorCategory           =  0x1 << 4;// bit 4

这可以说比将它们设置为2,4,8和16更清晰。

答案 2 :(得分:2)

<<Shift bits left

0x1 << 10x2相同。 0x1(00000001) << 1 => 0x2(00000010)

&#34;静态&#34;部分将其范围限制为compilation unit。它还提供静态初始化。 &#34; const的&#34;只是告诉编译器不要让任何人修改它。根据体系结构,此变量可以放在数据段或bss段中,也可以在内存中标记为只读。

答案 3 :(得分:0)

(0x1 << 1)

0x02

是两个表达式,它们使用相同的类型计算相同的值。