我试图理解c ++中if-else语句的条件,这是该语句所在的代码段(不是简写版本):
for (int i = 0; i < 8; ++i)
{
Point newCenter = center;
newCenter.x += oneEighth.x * (i&4 ? 0.5f : -0.5f);
}
我确实知道,如果条件为true,则0.5f成立,否则为-0.5f,但这是什么i&4
意思?
这在这里有两件事,首先是使用按位AND运算符&
,它采用两个整数(i
和4
)的二进制表示形式,并计算这两个整数的按位AND运算(即,对于结果数字二进制表示形式中的每个位置我们看一下位在两个参数对应的位置,并设置得到的位,以1
当且仅当在参数上的位都是1
),其次,它使用的是隐式int
来bool
转换其返回true
如果整数不等于0
。
例如,如果我们有i=7
,则此内容在二进制补码中的内部按位表示为:
/*24 0s*/ 0 0 0 0 0 1 1 1
并且4
is/*24 0s*/ 0 0 0 0 0 1 0 0
和so的二进制补码表示,并且按位AND is/*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
,因此不满足条件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句