補数について – プログラミング – Home

通知
すべてクリア

[解決済] 補数について


smile
 smile
(@smile)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

パソコン初心者ですが、
負の数字を表すとき、1の補数、2の補数とかありますよね?
パソコンの中では、どっちを採用しているんですか?

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


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

まず間違いなく 2の補数 です。 簡単だから。


返信引用
ユーカリ
 ユーカリ
(@ユーカリ)
ゲスト
結合: 23年前
投稿: 4
 

「パソコンの中」という言い方をするとアプリケーションソフトの
内部処理まで絡んでくるので、ここでは「CPUの中」と置き換えて
考えてみましょう。

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

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

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

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


返信引用
smile
 smile
(@smile)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

ユーカリさんありがとうございます!
勝手に2の補数という前提のもとで計算してましたが、
やはりメーカーに聞くのが一番ということですね。
ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました