Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9138

【Node.js】指定のビット位置にデータを設定する方法

$
0
0
はじめに 特定のビット位置にデータを設定したいと思った時に、どのようにコードを書けば良いでしょうか? 例えば、1バイトデータの中で6ビット目に1という値を入れたいというケースです(以下にデータを記載) 00010000 ↑5ビット目に1を設定する このように特定のビット位置にデータを設定したい場合の方法を試行錯誤したので、その記録を残したいと思います。 特定のビット位置にデータを設定する方法 特定のビット位置にデータを設定する方法として挙げられるのが、 シフト演算子(<<)を利用する方法 です。 例えば、5ビット目に1を設定したい場合は、0x01データに対して4ビット分だけ左シフトすれば良いです。以下に実際のコードを載せています。 // 5bit目に1を設定したいので、4ビット(5-1)分だけ左シフトする const bit = 0x01 << (5 - 1); // bit: 16(=0b00010000) 複数のビット位置にデータを設定する方法 次に、複数のビット位置にデータを設定する方法を考えます。 例えば、以下のように5ビット目と7ビット目にそれぞれ1を設定する場合です。 01010000 ↑ ↑ 5と7ビット目に1を設定したい 複数のビット位置にデータを設定する場合は、シフト演算子(<<)に加えて、 ビット論理和(|) を利用すれば実現できます。以下に実際のコードを載せています。 let bit = 0x00; // 5ビット目に1を設定したデータと、論理和を計算する bit = bit | 0x01 << (5 - 1); // 7ビット目に1を設定したデータと、論理和を計算する bit = bit | 0x01 << (7 - 1); // > bit: 80(=0b01010000) ビット論理和は、前後のデータの各ビット位置を比較し、どちらか一方のビットが1である場合に1、それ以外は0を返す演算子です。 今回の計算を図で表すと以下の通りです。 5ビット位置に1を設定する bit = bit | 0x01 << (5 - 1) 0b00000000 // bit 0b00010000 // 0x01 << (5 - 1) ----------- 0b00010000 // ビット論理和の結果(bit | 0x01 << (5 - 1)) 7ビット位置に1を設定する bit = bit | 0x01 << (7 - 1) 0b00010000 // bit (=上述で5ビット目に1を設定した結果) 0b01000000 // 0x01 << (7 - 1) ----------- 0b01010000 // ビット論理和の結果(bit | 0x01 << (7 - 1)) ビット論理和を用いることで前の計算結果を利用できるため、複数のビット位置に値を設定することができるようになります。 参考文献 JavaScript | ビット演算子/シフト演算子 | Let'sプログラミング

Viewing all articles
Browse latest Browse all 9138

Trending Articles