我读到左移e1<<e2
相当于e1* 2e2
。
但对于代码:
x=5;
printf("%d",x<<3);
输出 40 ,但根据我的说法, 30 。
对于x<<4
, 80 。(但预计 40 )。
虽然x<<1
和x<<2
输出 10 且 20 符合预期。
请解释这个逻辑。
答案 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。