左シフトe1<<e2
は と同等だと読みましたe1* 2e2
。しかし、コードの場合:
x=5;
printf("%d",x<<3);
出力は40ですが、私によれば30である必要があります。そして、x<<4
それは80です (ただし、予想されるのは40です)。
forx<<1
とx<<2
output は予想どおり10と20ですが。
このロジックを説明してください。
00000101 = 4 + 1 = 5
00101000 = 32 + 8 = 40
左シフトは、2、4、6、8 (つまり x*2) による連続した乗算ではなく、2、4、8、16 (つまり x^2) による連続した乗算です。
いいえ、40はかなり正しいです...
あなたが期待しているように見えるのは、「x * 2 * n」ですが、左シフトは別の操作です。
左シフトは効率的な "x * 2^n" と考えることができます。ここで、n は数字です。あなたの場合は 3 です。つまり、5 * 8、つまり40です。
同じことが 80 にも当てはまります: 5 * 16、つまり 80 です。