- ベストアンサー
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を反転させただけのもの。
関連するQ&A
- 補数表現で表現できる数値の範囲
8ビット固定小数点(補数表現)で表現できる数値の範囲を 求める問題があります。 この場合の補数表現は2の補数且つ符号付絶対値表現なのでしょうか? また、この問題の解説をお願いします。
- ベストアンサー
- 情報処理技術者
- 2の補数表現2進数が表す10進数は?、
次の2の補数表現の2進数が表す10進数はいくらか? 1111 1111 1111 1111 1111 1111 1111 1111 という問題があるのですが、 これを解くと、まず、上のビット列は2の補数表現なのだから、これはマイナスですよね?そして、次にビット列を2の補数を求めるやり方でやると元の数がわかりますよね(この辺がいまいち解っていない)? という事は全ビットを0にして、最下位ビットに1を 足せばいいから0000 0000 0000 0000 0000 0000 0000 0000 + 1 =0000 0000 0000 0000 0000 0000 0000 0001 となります。10進数だと 1を表すから答えはー1という事になるのでしょうか?お願いします。
- ベストアンサー
- その他(インターネット・Webサービス)
- 2の補数について
情報処理試験(基本情報)用の考え方という前提でお聞きします。 「負数を2の補数形式で表現する2進数の計算で・・・・」という問題がよくあります。 この問題文の中で「10101」などの数(これは5ビットの符号付2進数とします) として記述されているものは、もう2の補数になっていると考えていいのでしょうか? それともこれを、今から2の補数に直すのですか? (もし直すのであれば、最上位ビットの符号が変わるのでしょうか?) 違う言い方をしてみますと「A」の2の補数が「-A」だとしたら、 「-A」の2の補数は「A」になるんでしょうか? それとも「そんな表現はない。-Aの時点ですでに2の補数だ」という ことになるのでしょうか? 解りにくくてすみません。
- ベストアンサー
- その他(プログラミング・開発)
- 2の補数の問題
お世話になります。 初歩的な質問で申し訳ございませんが、質問させてください。 ------------------------------------------------------------- 問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち、4倍するとあふれが生じるものはどれか。 ア 1FFF イ DFFF ウ E000 エ FFFF ------------------------------------------------------------- 答えはイなのですが、イマイチです。 とある解説だと、4倍すると符号が変わるものがあふれとのことでした。 DFFF →(2の補数)0010 0000 0000 0001 →(4倍する)1000 0000 0000 0100 確かに符号が変わることは分かるのですが、ウでも E000 →(2の補数)0010 0000 0000 0000 →(4倍する)1000 0000 0000 0000 こちらも符号が変わることにはならないのでしょうか? どうぞよろしくお願いいたします。
- ベストアンサー
- 情報処理技術者
- 補数について質問
何度も何度もすみません。 例えば2進数であれば、ある数aの補数はその数aの負の値ですが、 その理由は、桁あふれ無視するからですか? 例えば10進数の10^2の補数表示では、39の補数は61ですが、桁あふれを無視するので、補数表現としては61と-39は同じと考えられるからですか? 絶対yesかNoかで考え方が合っているか判定してください。 絶対yesかNoかでお願いします。 具体的な式で説明します、この考え方も正しいか判定してくだされば幸いです。 (ex:51-39 補数の概念で計算:51+(61-100)=12 (61-100)は最上位の桁を無視する式に対応していて、その答えは-39。
- ベストアンサー
- 数学・算数