1
LabVIEW によるビットシフト参考プログラム
(最終改訂 2016/09/28)
書庫ファイル内容
LV_bitshift.zipには本解説ファイル(ファイル名LV_bitshift.pdf)とLabVIEWによるビットシフト 確認用の参考プログラム2種類が情報科学研究教育センターPCの起動OS(VDT:Virtual Desktop用 とLPC:Local PC用)に対応して計4本含まれている。拡張子を除いたファイル名はLV_bitshift_xxx が数値を直接入力しての確認用、またPixel_data_rev_xxxはLV_sample2.zip(情報学実験のページ「画 像情報処理」で公開)中の Pixel_data_xxx にビットシフト機能を組み込んだもので画像ファイルを開 いての確認用である。それぞれ xxx は情報科学研究教育センターの対応する起動 OS(VDT:Virtual Desktop用とLPC:Local PC用)を示す。
LV_bitshiftについて
ビット演算はプログラミングで日常的に利用される演算で、情報学実験Ⅱ課題⑦「画像情報処理」で は同課題テキスト(以下「テキスト」という。)p. 2 に示す様に画素データから色情報の抽出にビット 毎の論理積とビットシフトを用いている。コンパイラ、インタプリタのビット演算では機械命令を直接 呼出す場合と異なり、処理系でどの様に実装されているかに注意を要する。実際、LabVIEWのビット シフトは真のビットシフトではない(テキストp. 3)。LV_bitshiftはこれを確認するもので起動時のフ ロントパネルを図1に示す。以下の図はVirtual Desktop用の実行時のキャプチャ画像である。
図1 LV_bitshiftの起動時の既定の画面
画面左右に入力データとシフト結果をそれぞれ色画面、16進数字、十進数字(符号無し整数)とバイ ト毎に数値(符号無し整数)と8個の円LED(点灯時に色情報に対応。最上位バイトは白色)で表す。
データは中央部のボックス(上が16進数字(起動時の既定は80000000)、下が符号付十進数字(起動
2
時の既定は-1)でボックス右の垂直トグルSW(起動時の既定はON:16進数字)で切替える)に文字 列で入力(Enterは不要)する。下部の水平スライドでシフト量(註参照:起動時の既定は0)を指定 する。水平スライド右下の水平トグルSWでLabVIEWのビットシフトと真のビットシフトを切替え(起 動時の既定はOFF:LabVIEWシフト)、演算内容とシフト量はスライド上のボックスに表示される。
註:シフト量を符号付で表現する場合は、通常正が左シフト、負が右シフトを意味し、MATLAB の関
数bitshiftもそうなっている。水平スライドの左側が左シフト、右側が右シフトに対応する様に、こ
こでは水平スライドのスケールを逆にしている。
シフト量が 0 のとき(註参照)、画面右のシフト結果には入力データをそのまま出力し、ボックスに は ”no operation”と表示している。LabVIEWでは、実際にパラメータ0でシフトすると左右シフトの 何れもMSBが0のときは変化しないが、MSBが1のとき、0x7FFFFFFFとなるので注意を要する。
水平スライド下のボタン 、 はそれぞれLabVIEWによる左右の0ビットシフトで、このことを 確認できる。図2は起動時既定の設定で を押した状態である。
註:値が変化しないのでは無意味の様に思われるが、アセンブリプログラミングではシフト量0のビッ トシフトは論理シフトではNOPの代用として、また符号を保持しフラグを設定する算術シフトでは符 号ビットと零の判定に用いられる。
図2 MSBが1のデータに対する右0ビットシフトの結果
ビットシフトの命令では、どのCPUも最大シフト量で決る2の冪(32、64等)で割った余りを実際 のシフト量として使用しており、コンパイラであるLabVIEWも32で割った余りを用いている。この ため、32ビットデータに対して結果が0となる筈の32ビットシフトで0とはならず、上記0ビットシ フトの値となる(p. 3図3左)。更に、LabVIEWではシフト量が0ではない場合も0ビットシフトの 値を基準としてシフトされた結果となり、0x80000000を8ビット右シフトした結果が0x00800000で はなく、0x007FFFFFとなる(図3右)。左シフトでは、真のシフト結果でMSBが0となる場合は正 しく表わされるが(p. 3図4右)MSBが1となる場合には0となる(図4左)ことに注意する。水平 トグルSWをON(”true shift”側)にして真のビットシフト結果と比較しなさい。
3
図3 MSBが1のデータに対する右32ビットシフト(左)、右8ビットシフト(右)の結果
図4 真のシフト結果でMSBが1となる場合(左)と0となる場合(右)
Pixel_data_revはPixel_data(テキストp. 3参照)にビットシフトの機能を組み込んだもので、図5 にLV_sample2.zip同梱のtest.pngを開いた直後の既定の画面を示す。
図5 Pixel_data_rev でtest.pngを開いた直後の既定の画面
4
Pixel_data_revではPixel_dataにシフト指定の水平スライドと水平トグルSWが追加され(意味は
LV_bitshift のものと同じであるが、ボタン 、 は省略されている)、画面右に色画面、16 進数
値とバイト毎数値(符号無し整数)と円LED 群がシフト結果の表示として追加されている。データ表 示は右上が水平スライドで指定した方向、シフト量でシフトした結果、右下はこれを同じシフト量だけ 逆方向にシフトした結果である。例えば、マゼンタの画素を右に8ビットシフトして緑、左に8ビット 戻して赤となること(図6左)、左に16ビットシフトして赤、右に16ビット戻して青となることを(図 6右)確認できる。
図6 マゼンタ画素のシフト例:右8b後左8b(左)、左16b後右16b(右)
補足:「情報学実験のページ」で提供しているLabVIEW実行ファイルに共通
LabVIEW では、フォントを VI の作成時に明示的に指定することもできるが、通常実行ファイルを
作成する場合には(指定フォントがインストールされていない環境では表示できなくなるため)OS 既 定のフォント(設定を変更していなければ、Windows XP:MS UI Gothic、Windows Vista/7:メイリ オ、Windows 8/8.1:Meiryo UI、Windows 10:Yu Gothic UI)を使用しており、作成時のフォントと 実行時のフォントが異なる場合、文字列が表示枠からあふれたりレイアウトが乱れたりすることになる。
情報科学研究教育センターのPCでは、起動OSがVirtual Desktopの場合、動作はWindows 7であ るが既定のフォントにはMS UI Gothicを採用しており、Local PCとは異なるため実行ファイルとして
VDT、LPC 2種類の版を用意している。個人所有のPCで何れの版を使用しても盤面表示のレイアウト
がずれる場合は、最初の実行時に作成される設定ファイル(実行ファイルが置かれたフォルダに実行フ ァイルと同名で拡張子.iniで作成される)に次の3行を追加して実行ファイルを開き直す。
● Windows Vista以降の場合:LPC版の設定ファイルを編集する。
appFont="メイリオ" 18 dialogFont="メイリオ" 18 systemFont="メイリオ" 18
● Windows XPの場合:VDT版の設定ファイルを編集する。
appFont="MS UI Gothic" 12 dialogFont="MS UI Gothic" 12 systemFont="MS UI Gothic" 12