17

簡単な質問ですが、私はそれを完全に理解できないようです:

整数、たとえば12がある場合、次のビット操作を実行します。

int i = 12;  
i = (i << 3) + (i << 1);

最終的に120(12 * 10)になります。これは、任意の数の場合です。

誰かが私に簡潔に説明できますか、なぜこれが機能するのですか?(ビットシフトに関しては、明らかに非常に初歩的なものが欠けています)。

4

6 に答える 6

27

乗算として表現します。

i = (i << 3) + (i << 1);
i = (i * 8) + (i * 2);
i = 8i + 2i
i = 10i
于 2012-05-25T16:19:41.870 に答える
6

あなたは基本的にやっています:

i = i*2^3 + i*2
于 2012-05-25T16:19:29.943 に答える
4

i << 3と同等i * 8です。i << 1と同等i * 2です。

分配法則は次のことを示しています。

x = i * 10
x = i * (8 + 2)
x = 8i + 2i
于 2012-05-25T16:21:24.117 に答える
1

左に3桁シフトすることは、8を掛けることに等しいので、1桁シフトすることは、2を掛けることに等しいので、

i = i * 8 + i * 2
于 2012-05-25T16:20:26.190 に答える
1

左ビットシフトは(通常)2の累乗を掛けることと同じです。つまり、と<< 1同等であり*(2^1)<< 2と同等*(2^2)です。

これを例に置き換えると、結果に10が掛けられる理由がわかります。

int i = 12;
i = (i * 2^3) + (i * 2^1);
= { i = (i * 8) + (i * 2);}
= { i = 8i + 2i; }
= { i = 10i; }
于 2012-05-25T16:24:06.050 に答える
0

ビットシフトを2の累乗による乗算として書き直すと、すべてが明らかになるはずです。

于 2012-05-25T16:19:57.723 に答える