有人可以告诉我这里正在做什么:
Const uint32_t goodguys = 0x1 << 0
我假设它是 c++ 并且它正在为一个组分配一个标签,但我从未见过这样做。我是一个自学成才的客观 c 人,这对我来说看起来很陌生。
有人可以告诉我这里正在做什么:
Const uint32_t goodguys = 0x1 << 0
我假设它是 c++ 并且它正在为一个组分配一个标签,但我从未见过这样做。我是一个自学成才的客观 c 人,这对我来说看起来很陌生。
好吧,如果在您发布的那一行之后还有更多看起来像这样的行,那么它们可能是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
为 a 1
、2
等)。
所以好人= 0x1;真的和 goodguys = 1 的意思一样;
按位移位运算符将其第一个操作数向左 (<<) 或向右 (>>) 移动第二个操作数指定的位置数。看下面两条语句
好人= 0x1;
好人 << 2;
第一条语句与 goodguys = 1 相同;第二个语句说我们应该将这些位向左移动 2 个位置。所以我们最终得到
好人= 0x100
这与 goodguys = 4 相同;
现在你可以表达这两个语句
好人= 0x1;
好人 << 2;
作为一个单一的声明
好人 = 0x1 << 2;
这与您所拥有的相似。但是,如果您不熟悉十六进制表示法和按位移位运算符,它看起来会很吓人。
常量变量名 = 值;
在这种情况下, const 修饰符允许您将初始值分配给以后无法由程序更改的变量。例如
常量 int POWER_UPS = 4;
将 4 分配给变量 POWER_UPS。但是,如果您稍后尝试覆盖此值,例如
电源_UPS = 8;
你会得到一个编译错误。