谁能解释一下这个简短的 C 操作的输出?

Can anyone please explain me the output of this short C operations?

请解释在不同情况下执行的位运算的顺序。

(gdb) set $i = 1
(gdb) p $i << 1 + ($i << 3)
 = 512
(gdb) set $i = 1
(gdb) p ($i << 1) + $i << 3
 = 24
(gdb) set $i = 1
(gdb) p $i << 1 + $i << 3
 = 32
(gdb)

我会解释一个案例,剩下的交给你。

(gdb) p $i << 1 + ($i << 3)
 = 512

这一行,从右往左读,$i初为1(二进制为0001),左移<<3位,由于括号的缘故,有1000 ,然后加1得到1001,即9。接下来的<<表示从最初的$i左移9位,我们有2^9 = 512。这是您在下一行中看到的结果。

请注意原始 $i 没有被修改,您需要遵循优先顺序。