できるよ:
var num = str.charCodeAt(0);
var lower_nibble = (num & 0xF0) >> 4;
var higher_nibble = num & 0x0F;
それはどのように機能しますか?
num
isのビット表現を想定し、上位ニブルと下位ニブルとしてabcdwxyz
抽出したいとします。abcd
wxyz
下のニブルを抽出するには、ビットごとに数字を次のように付けて、上のニブルをマスクし0x0F
ます。
a b c d w x y z
&
0 0 0 0 1 1 1 1
---------------
0 0 0 0 w x y z = lower nibble.
上位のニブルを抽出するには、最初に次のようにビット単位のandingを使用して下位のニブルをマスクし0xF0
ます。
a b c d w x y z
&
1 1 1 1 0 0 0 0
---------------
a b c d 0 0 0 0
次に、結果をビット単位で右に4回シフトして、後続のゼロを取り除きます。
変数をビット単位で右に1回シフトすると、右端のビットが失われ、左端のビットがゼロになります。
a b c d w x y z
>> 1
----------------
0 a b c d w x y
同様に、ビット単位の右シフト2
時間は、次の結果をもたらします。
a b c d w x y z
>> 2
----------------
0 0 a b c d w x
ビット単位の右シフト4
時間は次のようになります。
a b c d w x y z
>> 4
----------------
0 0 0 0 a b c d
はっきりとわかるように、結果はバイト(abcd
)の上位ニブルです。