所以,对于我的考试,我必须评估一些C ++表达式。 这是表达式:
float x=3<<2>>1?4.:.5?6:7>8;
有人可以用语言解释它,因为我听不懂。 因此,我必须将3转换为二进制并将其移位2位。但是转换后的结果是11。我可以添加位符号,使其变为011。在位符号之后,我可以根据需要添加0,因此3 << 2->01100。但是之后,我不能理解一件事。条件运算符的条件在哪里?:因为我什么都看不到? 谢谢您提供的帮助我解决此问题的建议:)
答案 0 :(得分:5)
让我们的格式更好一些:
float x = (3 << 2) >> 1 ? 4. :
.5 ? 6 :
(7 > 8);
甚至更好:
float x;
if( 3<<2>>1 ) {
x = 4.;
} else if( .5 ) {
x = 6;
} else {
x = 7 > 8;
}
逐步评估3 << 2 >> 1
:
(3 << 2) >> 1 =>
(b0011 << 2) >> 1 =>
b1100 >> 1 =>
b0110 =>
6
由于6是非零值(在C ++中为true
,因此 x
将具有值4
。
答案 1 :(得分:4)
表达式是
3<<2>>1?4.:.5?6:7>8
让我们添加一些空格和括号:
((3 << 2) >> 1) ? 4. : (.5 ? 6 : (7 > 8))
移位1只是乘以2。移位2就是乘以2两次。
所以3 << 2
是12
。
12 >> 1
除以2,所以就是6
。
作为条件,所有整数(0
除外)均为true
,因此这仅返回4.0
。