リファレンス - javascript 入門



JavaScriptで演算子「>>」(二重矢印)と「|」(単一パイプ)は何を意味しますか? (4)

>>および<<演算子はビット単位のシフトです。 例えば、

11 =      00001011
11 << 3 = 01011000 = 88

m << n = m * 2^nおよびm >> n = m / 2^nであることは注目に値します。 これは時々2のべき乗による非常に効率的な乗算/除算をするために使われます。

&| それぞれビット単位のandとorです。

11 =      00001011
28 =      00011100
11 & 28 = 00001000 = 8

11 =      00001011
28 =      00011100
11 | 28 = 00011111 = 31

私がそれをしている間、私は^演算子に言及すべきです、それは力のために使われるのではなく、ビットごとの排他的論理和のために使われます。

11 =      00001011
28 =      00011100
11 ^ 28 = 00010111 = 23

https://ffff65535.com

私はいくつかのJSコードでこれを見ました:

        index = [
            ascii[0] >> 2,
            ((ascii[0] & 3) << 4) | ascii[1] >> 4,
            ((ascii[1] & 15) << 2) | ascii[2] >> 6,
            ascii[2] & 63
        ];

これがどういう意味なのかを知りたいのですが。 具体的には ">>"、シングルパイプ "|" そして最後の行に "&"記号がありますか?

とても有難い!


>>は右ビットシフトです。 ビットを取り、それらをn1だけ右にシフトします。 たとえば、 35 >> 2調べてみましょう。

35 = 100011 shift two places
     001000 = 8

そして確かに、 35 >> 2 == 8です。

| ビットごとのORです。 各オペランドの各ビットを取り、それらの論理和を取ります。 あなたは一種のバイナリ加算としてそれを想像することができます、しかし、あなたは上と下の両方が1とき、あなたは運びません。 たとえば、これは5 | 3 5 | 3

5 = 101
3 = 011
| -----
    111 = 7

そして確かに、 5 | 3 == 7 5 | 3 == 7

最後に、 &はビットごとのANDです。 各オペランドの各ビットを取ります。ただし、一方のビットまたは他方のビットが1の場合は1を代入​​し、一方のビットと他方のビットが1の場合は1を代入​​します。 たとえば、 5 & 3です。

5 = 101
3 = 011
& -----
    001 = 1

やってみよう; 5 & 3 == 1

あなたが気にしたいと思うかもしれない他のいくつかのものは<< 、これは左のビットごとのシフト、そして^ 、それはXORです(両方のビットが同じなら0、それらが違うなら1)。

1実際には、32を法とするnです1 >> 321です。 理由がわからない。



  • &(ビットAND)
  • | (ビットOR)
  • <<(左シフト)
  • >>(符号伝搬右シフト)

例( https://developer.mozilla.org/en/JavaScript/Reference/Operators/Bitwise_Operatorsから):

ビットごとに:

     9 (base 10) = 00000000000000000000000000001001 (base 2)
    14 (base 10) = 00000000000000000000000000001110 (base 2)
                   --------------------------------
14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)

左シフト(9 << 2は9のビットを2進数で、2ビット左へシフト):

     9 (base 10): 00000000000000000000000000001001 (base 2)
                  --------------------------------
9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10)




javascript