有人可以告诉我这里做了什么:
Const uint32_t goodguys = 0x1 << 0
我假设它是c ++并且它正在为一个组分配标签,但我从未见过这样做过。我是一个自学成才的人,对我来说这看起来很陌生。
答案 0 :(得分:3)
好吧,如果有更多的行看起来像你发布的行,那么它们可能是bitmasks
。
例如,如果您有以下内容:
const uint32_t bit_0 = 0x1 << 0;
const uint32_t bit_1 = 0x1 << 1;
const uint32_t bit_2 = 0x1 << 2;
...
然后您可以使用按位&
运算符与bit_0
,bit_1
,bit_2
,...和另一个数字,以便查看其他位中的哪些位号码已开启。
const uint32_t num = 5;
...
bool bit_0_on = (num & bit_0) != 0;
bool bit_1_on = (num & bit_1) != 0;
bool bit_2_on = (num & bit_2) != 0;
...
所以你的0x1
只是一种指定goodguys
是位掩码的方法,因为十六进制0x
指示符表明代码的作者专门考虑位,而不是十进制数字。然后<< 0
用于准确更改位掩码屏蔽的内容(您只需将0
更改为1
,2
等。)
答案 1 :(得分:3)
所以 goodguys = 0x1; 真的意思是一样的 goodguys = 1;
按位移位运算符将第一个操作数左移(&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&quot;&gt;&gt;)移位第二个操作数指定的位置数。请看以下两个陈述
goodguys = 0x1;
goodguys&lt;&lt; 2;
第一个语句与goodguys = 1相同; 第二个声明说我们应该将位向左移位2个位置。所以我们最终得到了
goodguys = 0x100
与goodguys = 4相同;
现在你可以表达两个陈述
goodguys = 0x1;
goodguys&lt;&lt; 2;
作为单一陈述
goodguys = 0x1&lt;&lt; 2;
与你的相似。但是,如果您不熟悉十六进制表示法和按位移位运算符,它将看起来令人生畏。
const variable-name = value;
在这种情况下,const修饰符允许您为以后无法由程序更改的变量分配初始值。对于实例
const int POWER_UPS = 4;
将4分配给变量POWER_UPS。但是如果你以后尝试覆盖这个值,比如
POWER_UPS = 8;
您将收到编译错误。