& 运算符是什么意思?

What does the & operator mean?

本文关键字:意思 是什么 运算符      更新时间:2023-10-16

我正在尝试理解 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是什么意思?

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

例如,如果我们有 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的,由于这不等于零,因此隐式转换为 true,因此满足条件。

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

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

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

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

所以,在你的代码中,当i为4,5,6,7时,i&4为真,因为4的底数2表示是100。 当i的底数2表示在第3位有1时,i&4将为真(右-左(