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

时间:2016-02-07 06:45:02

标签: c gdb bit-manipulation bit

请解释在不同情况下执行的BIT明智操作的顺序。

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

1 个答案:

答案 0 :(得分:1)

我将解释一个案例并将剩余部分留给您。

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

在这一行,从右到左阅读,$i最初为1(二进制为0001),左移<<为3位,由于括号,我们有1000,然后添加1以获取1001,即9。下一个<<表示从初始9开始移位$i位,我们有2^9 = 512。这是您在下一行中看到的结果。

请注意原始$i未被修改,您需要遵循优先权。