difference
unclassified
#migrated

負数を含む数値の表し方 > 2の補数表現 / オフセットバイナリ

More than 1 year has passed since last update.

負数を含む数値の表し方には色々あるが、自分が関係するものとしては以下の2つがある。

  • 2の補数表現
  • オフセットバイナリ

これらの使いわけについてはまだまだ勉強不足。

http://d.hatena.ne.jp/natsutan/20081104/1225770179

[2の補数]
一般的なプロセッサを使う場合、負の数に2の補数を使うことになります。符号によらずALUを共通化できるため、一般的に浸透しています。見た目では負の数がわかりにくいところがデメリットです。

[オフセット・バイナリ]
これは最小値を0としてオフセット表現をしています。AD/DAとデータのやりとりをする場合は、この形が多くなります。演算自体はそのまま出来ないので、若干工夫が必要です。見た目で大小関係がわかりやすい事と、AD/DAで言えば最大最小間のどのあたりになるのかが直感的にわかるのがメリットです。

https://www.altima.jp/column/fpga_edison/bit_number_signed.html

[オフセット・バイナリ]
単純な演算はこのままではできませんが、数の大小は分かりやすい表現になっています。

AD取込み時に2の補数かオフセット・バイナリで取るか選択できるものがある。プロセッサで得意な2の補数を最終形とするのであれば、オフセットバイナリにする意味がないように思われる。

オフセット・バイナリを最終形とする例がまだまだ分かっていない。

http://jaco.ec.t.kanazawa-u.ac.jp/edu/android/psoc.html

[ADCの出力データ形式]
ADCの出力データは、2の補数と符号無しが選択できますが、AGNDに対して、負電圧を測る可能性がある場合は、2の補数を使用すると負電圧が負の整数に対応するので便利です。ところが、受信側で文字列として受け取り、符号付き整数に変換されるとややこしい問題が起こります。簡単な対処法として、2の補数からオフセットバイナリ形式に変換して、負数を無くしてから送ることにします。受け取った後で、オフセット値を減算します。

2の補数のまま送信した時のややこしさがまだ理解できていない。減算するオフセット値がわかるのなら、2の補数でも受信側で元にもどせないのだろうか?