javascriptでビット演算をしてみよう!

16進数2桁のビット反転をしたい

今回求めたい値は、'ff' → '00' 、'00' → 'ff' 、'33' → 'cc' といったビット反転です。

結果

まずは 'ff' を文字列から2桁の16進数の値に変換
parseInt('変換したい16進数文字列', 基数)
parseInt('ff', 16);
>> 255
ビット反転
ビット演算子「~」:ビット毎のNOR。各ビットの反転させた結果を求める
~parseInt('ff', 16)
>> -256
あれ?なんか変??16進数に戻してみます。
整数を16進数文字列に変換
先ほどビット反転した値を16進数に変換すると
(~parseInt('ff', 16)).toString(16);
>> "-100"
これは本来求めたかった値とは異なります。
符号なし整数に置き換える
そこでビット反転した値を符号なし整数に置き換えます。
ビット演算子「>>>」:符号なし右シフト。0ビットの右シフトさせることで符号なし整数に変換。
(~parseInt('ff', 16)>>>0).toString(16);
>> "ffffff00"
下位2桁を抽出
javascript のビット演算は32ビットで処理されるため、上位24ビットを切り捨て、下位2桁(8ビット)だけを取り出します。
(~parseInt('ff', 16)>>>0).toString(16).slice(-2);
>> "00"

以上で16進数2桁のビット反転処理を実現することができました。

ちなみに、javascriptの文字列処理「slice メソッド」と「substr メソッド」、引数の渡し方が紛らわしく混乱するので注意が必要です。

注意点

javascriptでビット演算を行うときに注意すべきこと。

投稿日:

ページのトップへ戻る