- 締切済み
2進数の-13の表記について
2進数の表記について教えてください。 -13は2進数では11110011とあらわします。 なぜなら、13の2進数の00001101の2の補数だからです。 このように教わりました。 しかし、-13を11110011と表記してしまえば 10進数でいう243と表記が同じになってしまいませんか? この点がよくわかりません。 どなたか理解ある方は、教えてください。 よろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- jacta
- ベストアンサー率26% (845/3158)
負の値を2の補数で表現するのは、コンピュータの制約をカバーするための便宜です。実際、1の補数表現や符号ビット+絶対値で表現されることも(稀ですが)あります。 純粋に数学的には、-13は-1101と表現することになると思います。 > しかし、-13を11110011と表記してしまえば > 10進数でいう243と表記が同じになってしまいませんか? その通りです。実際、アセンブリ言語では両者を区別する方法はありません(アセンブリ言語には、静的な型がありませんので)。 その場合、シンボル名を工夫するなどして、そのデータが符号付きなのか符号無しなのか、自分で管理する必要があります。
- don_go
- ベストアンサー率31% (336/1059)
C言語では、char、unsigned charといった様に区別して そねぞれ -128~127、0~255の範囲で扱います。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>10進数でいう243と表記が同じになってしまいませんか? まったくその通りですね。 コンピュータ上では、1,0は、スイッチング素子のON,OFFに過ぎないので、それを論理状態として扱うことも、数値として扱うこともできますが、そのようにみなしているのは、扱う人だということに注意しましょう。 11110011 を 8ビット幅の2の補数表現だと捉えれば、-13になるし 符号無し正数だと捉えれば243になります。 要はそれを扱う人がどうみなしているかどうかの違いでしかありません。
通常ですが、マイナス表記のため補数を使うときには”先頭の1ビットは符号判定のためのチェックビットとする”ことになってます。 簡単に言うと ・先頭の1ビットが0なら正の数 ・ 〃 1なら負の数 となるってことです。 例の”11110011”は先頭が1ですから負の数ということになります。 これにより正の数としてあらわせる範囲が狭まりますが、その代償として負の数も表せるようになるってことです。
【回答100回目!】 質問者様の指摘通りです。 そのため http://www.algolab.co.jp/~lum/pcnyumon/nyu032.htm を見てもらうと判りますが8bitで表せる数は-128~127に制限されます。従って243という数字を表すことは出来ません。8bitなら。 16bitなら2^(-15)~2^(15)-1まで表せます。以下同様に32bitの場合も同じです。64bitもあるかな?(自信なし)