我试图理解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
是什么意思?
答案 0 :(得分:2)
这里使用两件事,首先是使用按位AND运算符&
,它采用两个整数(i
和4
)的二进制表示并计算按位两者的AND(即对于数字的结果二进制表示中的每个位置,我们查看两个参数中相应位置的位,并将结果位设置为1
当且仅当两个位都在参数是1
),其次,它使用隐式int
到bool
转换,如果整数不等于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个