重複の可能性:
ビットシフトの初心者向けガイド?
JavaScript >>> 演算子とは何ですか?どのように使用しますか?
<<
いくつかのコードを読んでいるときに出くわしました。
1<<1 //2
2<<1 //4
3<<1 //6
3<<2 //12
重複の可能性:
ビットシフトの初心者向けガイド?
JavaScript >>> 演算子とは何ですか?どのように使用しますか?
<<
いくつかのコードを読んでいるときに出くわしました。
1<<1 //2
2<<1 //4
3<<1 //6
3<<2 //12
この回答から取得:
整数は一連のビットとしてメモリに格納されます。たとえば、32 ビットとして格納される数値 6は次のint
ようになります。
00000000 00000000 00000000 00000110
このビット パターンを 1 つ左の位置 ( 6 << 1
) にシフトすると、数値は 12 になります。
00000000 00000000 00000000 00001100
ご覧のとおり、桁が 1 桁左にシフトし、右側の最後の桁が 0 で埋められています。また、左にシフトすることは、2 のべき乗による乗算と同等であることに注意6 << 1
し6 * 2
て6 << 3
ください6 * 8
。優れた最適化コンパイラは、可能であれば乗算をシフトに置き換えます。
これらは循環シフトではないことに注意してください。この値を 1 桁左にシフトする ( 3,758,096,384 << 1
):
11100000 00000000 00000000 00000000
結果は 3,221,225,472 になります。
11000000 00000000 00000000 00000000
「最後から」シフトされた桁は失われます。回りません。
ビットごとの左シフト演算子です。
a << b
b
のバイナリ表現の左にビットをシフトしますa
。