左移操作中的意外输出......?

时间:2010-10-23 21:58:53

标签: c bit-shift

我读到左移e1<<e2相当于e1* 2e2。 但对于代码:

x=5;
printf("%d",x<<3);

输出 40 ,但根据我的说法, 30 。 对于x<<4 80 。(但预计 40 )。

虽然x<<1x<<2输出 10 20 符合预期。

请解释这个逻辑。

2 个答案:

答案 0 :(得分:4)

00000101 = 4 + 1 = 5

00101000 = 32 + 8 = 40

左移不是连续乘以2,4,6,8(即x * 2) - 连续乘以2,4,8,16(即x ^ 2)。

答案 1 :(得分:1)

不,40是对的......

你似乎期待的是:“x * 2 * n”,但左移是一种不同的操作。

您可以将左移视为一个有效的“x * 2 ^ n”,其中n是数字 - 在您的情况下为3.所以您正在做的是5 * 8,其中 40。

同样适用于80:5 * 16,即80。