2

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

Const uint32_t goodguys = 0x1 << 0

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

4

2 回答 2

4

好吧,如果在您发布的那一行之后还有更多看起来像这样的行,那么它们可能是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 12等)。

于 2013-08-19T15:20:20.960 回答
3
  • 虽然以 10 为基数是在程序中编写数字的常用方法,但有时您希望以八进制或十六进制表示数字。要以八进制写入数字,请在值前面加上 0。因此,023 实际上意味着以 10 为底的 19。要以十六进制写入数字,请在值前面加上 0x 或 0X。因此,0x23 实际上意味着以 10 为底的 35。

所以好人= 0x1;真的和 goodguys = 1 的意思一样;

  • 按位移位运算符将其第一个操作数向左 (<<) 或向右 (>>) 移动第二个操作数指定的位置数。看下面两条语句

    好人= 0x1;

    好人 << 2;

第一条语句与 goodguys = 1 相同;第二个语句说我们应该将这些位向左移动 2 个位置。所以我们最终得到

好人= 0x100

这与 goodguys = 4 相同;

现在你可以表达这两个语句

好人= 0x1;

好人 << 2;

作为一个单一的声明

好人 = 0x1 << 2;

这与您所拥有的相似。但是,如果您不熟悉十六进制表示法和按位移位运算符,它看起来会很吓人。

  • 当 const 与变量一起使用时,它使用以下语法:

常量变量名 = 值;

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

常量 int POWER_UPS = 4;

将 4 分配给变量 POWER_UPS。但是,如果您稍后尝试覆盖此值,例如

电源_UPS = 8;

你会得到一个编译错误。

  • 最后, uint32_t 表示 32 位无符号整数类型。当你想确保你的变量是 32 位长而不是别的时,你会使用它。
于 2013-09-23T16:51:15.293 回答