整数作为C ++“:?”中的条件算子

时间:2018-11-15 22:13:38

标签: c++

所以,对于我的考试,我必须评估一些C ++表达式。 这是表达式:

float x=3<<2>>1?4.:.5?6:7>8;

有人可以用语言解释它,因为我听不懂。 因此,我必须将3转换为二进制并将其移位2位。但是转换后的结果是11。我可以添加位符号,使其变为011。在位符号之后,我可以根据需要添加0,因此3 << 2->01100。但是之后,我不能理解一件事。条件运算符的条件在哪里?:因为我什么都看不到? 谢谢您提供的帮助我解决此问题的建议:)

2 个答案:

答案 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 << 212

12 >> 1除以2,所以就是6

作为条件,所有整数(0除外)均为true,因此这仅返回4.0