将二进制文字分配给 int 背后的逻辑

logic behind assign binary literals to an int

在代码中发现了该逻辑,但不明白其背后的原因;为什么使用它而不是分配正常的 int(3D环境下的角色控制器)

// assumes we're not blocked
int blocked = 0x00;

if ( its_a_floor )
        blocked |= 0x01;

if ( its_a_wall )
        blocked |= 0x02;

0x00 是一个“正常的 int”。我们习惯于以 10 为基数表示,但除了总共有 10 个手指外,以 10 为基数并不特殊。当您在代码中使用整数文字时,您可以在十进制、八进制、十六进制和二进制表示法之间进行选择(请参阅 here)。不要将值与其表示混淆。 0b011 是相同的整数。从字面上看,没有什么区别。

作为一个有趣的事实并为了说明上述内容,请考虑 0 实际上不是十进制文字。它是一个八进制文字。这并不重要,因为 0 在任何基础上都有相同的表示。

由于代码使用的是按位运算符,因此使用二进制文字最为方便。例如,您可以很容易地看到 0b0101 | 0b10101 等于 0b1111 并且 0b0101 & 0b1010 等于 0b0000。这在使用以 10 为基数的表示时并不那么明显。

但是,您发布的代码不使用二进制文字,而是使用十六进制文字。这可能是因为二进制文字只是自 C++14 以来的标准 C++,或者因为习惯于位运算符的程序员已经习惯了十六进制,所以他们仍然使用它们而不是二进制。