C 使用整数表达式中使用和操作员

C++ using AND operator in integer expression

本文关键字:操作员 整数 表达式      更新时间:2023-10-16

我正在读一些用于设计octree的源代码,并在代码中找到了这一点。我删除了一些元素以简化,但是谁能解释i&4应该评估的内容?

for (int i = 0; i < 8; i++)
{
    float j = i&4 ? .5f : -.5f;
}

&bitwise AND Operator

它只是在i AND 0x4中存储的值的位操作。

它完全仅将第三位隔离为2^2 = 4。

您在循环中的表达式检查是否在i中设置了第三位,并分配给J(必须是float!)0.5或如果未设置-0.5

我不确定,但是它可以评估i和4(100)的位和操作,因此在第三位中具有'1'的任何数字都将被评估为true,否则错误。

ex:5(101)&amp;4(100)= 100(4),与0不同,因此8(1000)&amp;4(100)= 0000(0)是false

在这种情况下,&操作员是一个位和。由于第二操作数为4,功率为2,因此当i具有其第二个最不重要的位时,它评估为4,否则为0。

for循环从0到7的i占用。考虑在此范围内i的位表示:

0000 - 0
0001 - 1
0010 - 2
0011 - 3
0100 - 4
0101 - 5
0110 - 6
0111 - 7
 ^
 |
This bit determines the result of i & 4

因此,条件的最终结果如下:如果设置了第二位(即,当i为4、5、6或7),则结果为0.5f;否则,是-0.5f

对于给定的值范围,可以将此表达式重写为

float j = (i >= 4) ? .5f : -.5f;

i & 4设置了值时,只需评估为true即可。在您的情况下,这仅发生在循环的后半部分。因此,代码实际上可以重写:

for (int i = 0; i < 4; i++)
{
    float j = -.5f;
}
for (int i = 4; i < 8; i++)
{
    float j = .5f;
}