補数について

[戻る]
smile [E-Mail] 2002/11/29(金) 16:30:24
パソコン初心者ですが、
負の数字を表すとき、1の補数、2の補数とかありますよね?
パソコンの中では、どっちを採用しているんですか?

RS232を使って、通信しようとしています。そのときに、
あるセンサからデータが送られてくるんですが、そのデータがビット列らしいんです。
このデータを解析したいので、負の数字を表すときに、1の補数で表しているのか、
または2の補数なのか知りたいのでよろしくお願いします。

επιστημη 2002/11/29(金) 17:22:50
まず間違いなく 2の補数 です。 簡単だから。

ユーカリ [E-Mail] 2002/12/04(水) 08:28:15
「パソコンの中」という言い方をするとアプリケーションソフトの
内部処理まで絡んでくるので、ここでは「CPUの中」と置き換えて
考えてみましょう。

「2の補数」というのは、あくまで人間側の勝手な解釈なんですね。
「桁あふれを無視して演算したら結果的にそうなる」という
結果論に過ぎません。まぁ、結果的にそうなるのですから
文句のつけようはないのですが(苦笑)。

対して「1の補数」というのは、2進数で演算しているCPUは
そのままでは処理できませんから、「2の補数」に直さなければなりません。
しかし、その処理は非常に簡単です。なんたって1を足すだけです。
というか、ご存知かと思いますが、そもそも「2の補数」というのは
「全ビットを反転して1を加える」というアルゴリズムで求めますよね?
これは1の補数を求めてそれに1を足すことと同じ意味です。

さて。そのセンサーがRS-232Cを通してデータを送ってくる場合、
いったいどっちの方が都合が良いのでしょう?
そう、「1を加える」という回路が必要のない分、「1の補数」の方が
『簡単』ですよね?
さらに簡単な方法もありますよ。それは「符号ビット+実数部」という
フォーマットにすることです。そうすると「全ビット反転回路」まで
いらなくなりますから、さらに『簡単』になります。
どうせ相手は高性能プロセッサを搭載したパソコンですから、
センサーは少々不親切でもより単純により安く設計したほうが
みんな幸せです。
しかし、センサー自体もRS-232Cインターフェイスにデータを送るのに
なんらかのプロセッサを必要としていたら、そのプロセッサが
センサーの信号を「2の補数」に変換して送出しているかもしれません。

そんなわけで結論としては「センサーの仕様をメーカーなりに確認しましょう」
ということになりますね。

smile [E-Mail] 2002/12/04(水) 16:25:52
[[解決]]
ユーカリさんありがとうございます!
勝手に2の補数という前提のもとで計算してましたが、
やはりメーカーに聞くのが一番ということですね。
ありがとうございます。

古いスレッドには追加発言できません。