12

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

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

これが何を意味するのか知りたいです。具体的には「>>」、単一パイプ「|」最後の行の「&」記号は?

とても有難い!

4

5 に答える 5

19

x >> yのビットを場所ごとに右(左)にシフトすることを意味xyます<<

x | yとのビットを比較することを意味し、またはがその位置にある場合は各ビットxyを入れます。1xy1

x & y結果が両方であり、が。|である点を除いて、はと同じです。1xy1

例:

#left-shifting 1 by 4 bits yields 16
1 << 4 = b00001 << 4 = b10000 = 16

#right-shifting 72 by 3 bits yields 9
72 >> 3 = b1001000 >> 3 = b1001 = 9

#OR-ing 
8 | 2 = b1000 | b0010 = b1010 = 10

#AND-ing
6 & 3 = b110 & b011 = b010 = 2

詳細については、Googleで「ビット演算子」を検索してください

于 2012-05-02T22:48:07.937 に答える
8

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

35 = 100011 shift two places
     001000 = 8

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


|ビットごとのORです。各オペランドの各ビットを取り、それらをOR演算します。一種の2進加算として想像することはできますが、上と下の両方がである場合は実行しません1。たとえば、ここにあります5 | 3

5 = 101
3 = 011
| -----
    111 = 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です。理由はわかりません。

于 2012-05-02T22:51:03.590 に答える
4

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

11 =      00001011
11 << 3 = 01011000 = 88

m << n = m * 2^nそれは注目に値しm >> n = m / 2^nます。これは、2の累乗による非常に効率的な乗算/除算を行うために使用されることがあります。

およびはそれぞれビット単位およびおよびまたはです&|

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

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

私がそれに取り組んでいる間、私は^演算子に言及する必要があります。これは電力には使用されませんが、ビット単位の排他的論理和に使用されます。

11 =      00001011
28 =      00011100
11 ^ 28 = 00010111 = 23
于 2012-05-02T22:55:45.380 に答える
2
  • &(ビットごとの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)
于 2012-05-02T22:53:39.200 に答える
1

私にはビット演算子のように見えます:

http://web.eecs.umich.edu/~bartlett/jsops.html

編集:そのアスキー配列は死んだプレゼントでした...笑

于 2012-05-02T22:44:23.230 に答える