-1

左シフトe1<<e2は と同等だと読みましたe1* 2e2。しかし、コードの場合:

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

出力は40ですが、私によれば30である必要があります。そして、x<<4それは80です (ただし、予想されるのは40です)。

forx<<1x<<2output は予想どおり1020ですが。

このロジックを説明してください。

4

2 に答える 2

4

00000101 = 4 + 1 = 5

00101000 = 32 + 8 = 40

左シフトは、2、4、6、8 (つまり x*2) による連続した乗算ではなく、2、4、8、16 (つまり x^2) による連続した乗算です。

于 2010-10-23T22:03:44.430 に答える
1

いいえ、40はかなり正しいです...

あなたが期待しているように見えるのは、「x * 2 * n」ですが、左シフトは別の操作です。

左シフトは効率的な "x * 2^n" と考えることができます。ここで、n は数字です。あなたの場合は 3 です。つまり、5 * 8、つまり40です。

同じことが 80 にも当てはまります: 5 * 16、つまり 80 です。

于 2010-10-23T22:01:56.297 に答える