什么&运营商意味着

时间:2014-10-22 12:07:55

标签: c++

我试图理解c ++中if-else语句的条件,这里是这个语句所在的片段(不是它的简写版本):

for (int i = 0; i < 8; ++i)
    {
        Point newCenter = center;
        newCenter.x += oneEighth.x * (i&4 ? 0.5f : -0.5f);
    }

我明白如果条件为真,则0.5f保持不变,否则为-0.5f,但i&4是什么意思?

2 个答案:

答案 0 :(得分:2)

这里使用两件事,首先是使用按位AND运算符&,它采用两个整数(i4)的二进制表示并计算按位两者的AND(即对于数字的结果二进制表示中的每个位置,我们查看两个参数中相应位置的位,并将结果位设置为1当且仅当两个位都在参数是1),其次,它使用隐式intbool转换,如果整数不等于true,则返回0

例如,如果我们有i=7,那么在2的补码中的内部按位表示将是:

/*24 0s*/ 0 0 0 0 0 1 1 1

4的两个补码表示为/*24 0s*/ 0 0 0 0 0 1 0 0,因此按位AND为/*24 0s*/ 0 0 0 0 0 1 0 0,因为它不等于零,所以它被隐含地转换为{{ 1}}所以条件得到满足。

或者,如果我们考虑true,那么我们有内部表示:

i=2

因此按位AND给出/*24 0s*/ 0 0 0 0 0 0 1 0 ,因此不满足条件。

答案 1 :(得分:1)

运算符是按位AND。 按位二进制AND以二进制形式对数字的每个位置中的位进行逻辑AND。

所以,在你的代码中,当我是4,5,6,7时,i&amp; 4是真的,因为4的base-2表示是100.当i的base-2表示时,i&amp; 4将为真在第3个位置(右 - 左)有1个