我正在阅读一些设计八叉树的源代码,并在代码中找到了它。我已经删除了一些简化的元素,但有人可以解释i&4
应该评估的内容吗?
for (int i = 0; i < 8; i++)
{
float j = i&4 ? .5f : -.5f;
}
答案 0 :(得分:3)
&
是bitwise AND Operator
。
它只是对i AND 0x4
中存储的值进行按位运算。
它恰好将第三位隔离为2 ^ 2 = 4.
循环中的表达式检查是否在i中设置了第三位并分配给j(必须是浮点数!)0.5或者如果没有设置-0.5
答案 1 :(得分:1)
在这种情况下,&
运算符是按位AND。由于第二个操作数是4,幂为2,当i
设置了第二个最低有效位时,它的计算值为4,否则为0。
for
循环将i
从0到7(包括0和7)。考虑此范围内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;
答案 2 :(得分:1)
我不确定,但它可以评估i和4(100)的按位和操作,因此任何在其第三位中具有“1”的数字将被评估为真,否则为false。
例: 5(101)&amp; 4(100)= 100(4),它与0不同,所以它的真实性 8(1000)&amp; 4(100)= 0000(0)这是假的
答案 3 :(得分:0)
i & 4
只在设置了值-4位时评估为true。在你的情况下,这只发生在循环的后半部分。所以代码实际上可以重写:
for (int i = 0; i < 4; i++)
{
float j = -.5f;
}
for (int i = 4; i < 8; i++)
{
float j = .5f;
}