这行代码有什么作用? Const uint32_t goodguys = 0x1<< 0

时间:2013-08-18 23:13:41

标签: tags

有人可以告诉我这里做了什么:

Const uint32_t goodguys = 0x1 << 0

我假设它是c ++并且它正在为一个组分配标签,但我从未见过这样做过。我是一个自学成才的人,对我来说这看起来很陌生。

2 个答案:

答案 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_0bit_1bit_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更改为12等。)

答案 1 :(得分:3)

  • 虽然基数10是在程序中写入数字的常规方法,但有时您希望以八进制数或十六进制数表示数字。要以八进制写入数字,请在值前面加上0.因此,023,实际上在基数10中表示19。要以十六进制写入数字,请在值前面加上0x或0X。因此,0x23,实际上意味着基数10中的35。

所以    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与变量一起使用时,它使用以下语法:

const variable-name = value;

在这种情况下,const修饰符允许您为以后无法由程序更改的变量分配初始值。对于实例

const int POWER_UPS = 4;

将4分配给变量POWER_UPS。但是如果你以后尝试覆盖这个值,比如

POWER_UPS = 8;

您将收到编译错误。

  • 最后,uint32_t表示32位unsigned int类型。当你想确保你的变量是32位长而没有别的时候,你将使用它。