x< x<

时间:2013-11-04 07:11:11

标签: c++ bit-shift

我想使用位移运算符将数字乘以10 为了尝试,我初始化了x = 1。然后我分配了x = x<<1 + x<<3。这打印了x = 32 但是当我分配x = (x<<1) + (x<<3)时,它会打印x = 10

这种差异来自哪里?

我正在使用c ++ 11。

2 个答案:

答案 0 :(得分:10)

看看区别:

x = x<<1 + x<<3
x = 1<<1 + 1<<3     // execute 1+1 first
x = 1<<2<<3         // execute 1<<2
x = 4<<3
x = 32

和这个

x = (x<<1) + (x<<3)
x = (1<<1) + (1<<3)
x = 2 + 8
x = 10

答案 1 :(得分:1)

首先评估括号中的表达式。没有它们,移位操作将在添加之前执行。

首先,C ++评估(x <&lt; 1)等于2。

然后评估(x <&lt; 3)等于8。

最后,它增加了2 + 8 = 10。