- ベストアンサー
2の補数表現を理解するには
「2の補数表現」で過去の質問を検索してみましたが・・・ よく解りませんでした。 どのように理解を深まればいいのでしょうか? また、誰が聞いても理解できるような説明をしてくれませんでしょうか。 図々しい質問をしている事は重々わかっています。 申し訳ありませんが宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
簡単に言うと「足して0になる数値」です。 60進数で例えてみます。 「45分から、何分経てば、0分丁度になるか?」の質問の答えは「15分」です。 これは「60の補数表現で、45の補数は幾つか?」と言う質問と同じで、答えは「15」になります。 「45分+15分=(1時間と)0分」なので「45に足して0になる数値」は「15」なのですね。 では、12進数で例えてみます。 「10時から、何時間経てば、0時丁度になるか?」の質問の答えは「2時間」です。 次に、10進数で例えてみます。 「車の走行距離計が、6桁で951234キロになっている。あと何キロ走ると一回りして000000に戻るか?の質問の答えは「48766キロ」です。 「10進6桁で、951234の補数は48766である」というのと同じです。 もう「2進8桁で、11010100の補数はいくつか?」と聞かれても答えられる筈です。 これは「11010100にいくつ足せば、9ビット目に溢れて、下位8ビットが00000000になるか?」と聞いているのと同じです。 答えは「00101100」ですね。 「11010100+00101100=[1]00000000」で、9ビット目の「[1]」が溢れて消え、00000000になります。 つまり「足して0になる」ので「11010100の2の補数は、00101100」です。
その他の回答 (5)
- flextime
- ベストアンサー率45% (31/68)
http://www.k4.dion.ne.jp/~type_f/keywords/hosuu.html のページに2の補数の説明があります。
- jjon-com
- ベストアンサー率61% (1599/2592)
http://okwave.jp/qa4175997.html の私の過去の回答 ANo.2~ANo.4
- chie65536
- ベストアンサー率41% (2512/6032)
続き。 ANo2までが「補数について」です。 ここからは「2の補数表現について」です。 簡単に言うと「2の補数を取って、一番上のビットを符号ビットとして扱った」のが「2の補数表現」です。 先ほどの例の 「11010100+00101100=[1]00000000」 で言えば 「11010100」は最上位の符号ビットが立っているので負の数 「00101100」は最上位の符号ビットが寝ているので正の数 と言えます。 つまり 「<0>0101100は、プラスの0101100」(←7ビットである事に注目) 「<1>1010100は、マイナスの0101100」(←7ビットである事に注目) と言えます。 「ある数に、マイナスの同じ数を足せば、0になる」のですから、ANo2の冒頭の「足して0になる数値」も成立します。 「2の補数」と「2の補数表現」は「似て非なるもの」ですのでご注意を(これが「理解しづらい原因」の1つです)
- LN-TF
- ベストアンサー率53% (320/596)
一応御説明致します。 2の補数は、一般には2進数が前提となります。 2進数ですから0と1としかありません。 0⇒1⇒10⇒11⇒100・・・ となります。 普通の手書きの場合は幾らでも桁は増やせますが、電卓やコンピュータの中では桁数は限界があります。 今簡単のために、4桁の場合を例にとってみます。 すると、まず0000がゼロになります。+1で、0001となります。以下0010、0011…となって行きます。 さて、0001+1111はどうなるでしょうか? 桁上がりができるのならば、10000ですが、4桁しかないので桁上がりをした先頭の「1」はこぼれてしまい0000となってしまいます。 つまり、1111を加える事は、マイナス1を加えた事と結果として同じい事になります。つまり1111をマイナス1の代わりに使う事によって足算だけで引算と同じ事をやろうと云うのです---これが2の補数の存在意義です。(コンピュータで純粋の引算を行わせるよりも2の補数を作ってそれを加算した方がコンピュータを作る上では楽なのです) ある数字を得て、それの2の補数を拵えるのには、二段階で行います。 ビットを裏返しににします。(各桁毎に0なら1に1なら0にする)それに1を加えます。 これでお解りいただけたでしょうか?
- arain
- ベストアンサー率27% (292/1049)
>また、誰が聞いても理解できるような説明をしてくれませんでしょうか。 それは無理。 最低でも2進数、出来れば16進数も理解している必要があるので。 以下はそれが前提です。 簡単に表現すれば、「2進数の0/1を反転させて、(n-1:nはnの補数の部分)を足す」ことで正負逆の値を表すこと。 10進数の1を8桁(ビット)の2進数で表現した場合「00000001」となります。 これを0/1を反転し「11111110」とし「n-1」(2の補数なら2-1 = 1)を足します。 この値が「11111111」=10進数で「-1」となります。 ちなみに「2の補数」があれば「1の補数」も存在します。 これは単純に0/1を反転させただけのもの。