我想使用位移运算符将数字乘以10
为了尝试,我初始化了x = 1
。然后我分配了x = x<<1 + x<<3
。这打印了x = 32
但是当我分配x = (x<<1) + (x<<3)
时,它会打印x = 10
。
这种差异来自哪里?
我正在使用c ++ 11。
答案 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。