この記事では、LabVIEWでビット演算を行う例を紹介しています。
通常は四則演算のための和や差、積、商を使用して計算を行うことが多いと思いますが、扱うデータによってビット演算を行う場合もあると思います。
LabVIEWでそのようなビット演算を行うのにどのような選択肢があるかをまとめてみました。関数としては他にもあるようですが、演算に関わっていて使用する場面が比較的多いであろう処理のみ扱っています。
なお、ビット演算の式の意味そのものは本記事では扱っていません(例えばビットシフトの関数を使った結果がどうしてそのような値になるかについての説明はしていません)ので、基本的な意味については適宜調べてみてください。
表示形式の変更
本題に入る前に、表示形式の変え方について簡単に紹介します。
この記事で扱っているビット演算は、2進数(バイナリ)表示にした場合に演算の様子がわかりやすくなるため適宜バイナリ表示で結果を表しています。
この表示は以下のように変更することができます。なお、バイナリ(2進数)が選べるのは整数データであって、浮動小数点データでは選ぶことができないので注意します。
なお、指定した数値形式よりも桁数が足りない場合には表示形式の設定を変える事で表示させられるようになります。
ビット演算のための関数・機能
ビット演算に使用できる関数、機能には以下があります。
- ビットシフト
- 2の累乗でスケール
- キャリーつき循環
- バイトスワップ
- フォーミュラノード、数式ノード
- OR、ANDなど(ブール演算に使用する関数)
特にブール演算の関数を数値に対して使用できることは、知らなくては試そうともしないのではないかなと思います。
ではこれらを使用してどのような結果を得られるか具体的に紹介していきます。
ビットシフト
ビットシフトすることで、簡単に数字を2倍、4倍、8倍、あるいは1/2倍、1/4倍、1/8倍、・・・とすることができます。
ただし、符号付整数の場合には注意が必要で、最上位ビットが符号を表す関係上、ビットシフトによって正負が変わることが起こりえます。
この不便が起こる場合には、次に紹介する方法を用います。
2の累乗でスケール
読んで字のごとく、2の累乗で値を変化させるのに使用できます。ビット演算している感覚はないのですが、実際にはビットシフトと同じようなことができます。
また、ビットシフトで問題になった(?)符号付整数の正負が変わるという問題が起こりません。
キャリーつき循環
入力した値のビットを循環させて、指定の値を挿入するという処理をキャリーつき循環で実装できます。
数値パレットの中のデータ操作パレットに左循環、右循環があります。
循環させることで抜けてしまったビットに対して0を入れるか1を入れるかをキャリー(ブールデータ)で指定します。
また、循環処理前に最下位/最上位ビットに何が入っていたかを出力させることもできます。
フォーミュラノード、数式ノード
LabVIEWで複雑な計算を行う際にテキスト言語のように演算内容を記述するときに使用するフォーミュラノードや数式ノードでも対応しています。
複数の計算をして複数の結果を得る場合にはフォーミュラノードを使用するのが便利ですが、一つの出力結果を得る場合には数式ノードが楽です。
OR、ANDなど(ブール演算に使用する関数)
関数パレットで「ブール」のパレットに入っているORやANDは実は数値に対しても使用することができます。
OR、AND、NOT、XORといった関数(ノード)を駆使して数値に対し特定の処理を施します。
この記事では、LabVIEWでビット演算を行う方法について紹介しました。
使用する場面は限られるかもしれませんが、こういうことができるんだと知っておくことで役に立つ場面に出会う(?)場合にでも思い出してみてください。
ここまで読んでいただきありがとうございました。
コメント