アンケート一覧ページでアンケートを探す

大至急 2進数の補数を使った減算はなぜ桁上がりを無視するのかを教えてください! またなぜ補数を足すのでしょうか

数学 | C言語関連451閲覧

新機能 AI回答テストを実施中! テスト対象カテゴリ:歴史・悩み相談 ※回答がつかない場合は、画面のリロードをお試しください

ベストアンサー

画像

NEW! この回答はいかがでしたか? リアクションしてみよう

>0111-0100は…、なぜ0111と1100を足すのか  「-0100」は、緑色の反時計回りに、4目盛り回転すること。  0000を起点にするなら、1100に到達します。  しかし1100は符号無し2進数だと、10進数12を表すビットパターン。  0000を起点に、茶色の時計回りに、12目盛り回転しても1100に到達する。  つまり、0000を基準に反時計回りが負、時計回りが正と考えるなら、4ビット2進数の円形数直線上では、「-0100」と「+1100」は同じ。

ThanksImg質問者からのお礼コメント

とても分かりやすく、説明する時に参考にさせていただきました!

お礼日時:11/23 23:16

その他の回答(8件)

補数というときは桁数を明確にする必要があるのです。明確にしないと桁上がりを起こしようがない。 桁数を決めたのでそれ以上はみ出したのは表しようがないので無視するのです。 数学的には補数とは元の数に加えて”桁上り”を起こす数のうち最小の数。 1の10の補数・・・9 1桁の場合 1桁と決めたから桁上がりがおこる。以下同じ 1の100の補数・・・99 2桁の場合 1の1000の補数・・・999 3桁の場合 1ではわかり難いので 26の100の補数で説明すると100−26=74 74、75、76、77、・・・98、99はすべて桁上がりを起こす。そのうちの”最小”の74が数学的補数の定義により、26の100の補数です。 26の1000の補数は974です。973以下では桁上がりが起こらない。 26の10000の補数は9974 これらのことは2進数についても当てはまります。

なぜ、引き算に補数を使うのか? コンピューでは減算回路を用意しないで済むので補数を使うことにした。2の補数が大部分です。 2進数 桁数は8桁とする。 条件1)0〜255(10)ある数で負の数も表す。 条件2)減算も加算でやりたい。 「続く」

「2進数の補数を使った減算はなぜ桁上がりを無視するのか」へのお答え。 無視してませんよ。 符号なし整数を例に説明しますが、 補数表現に変えたときに、最上位桁の1つの上の桁から1借りたままだから、 演算で最上位桁の1つの上の桁への繰上がりが起きて借りた1を返して、 終えているのです。 ちゃんと、辻褄は合ってるのです。 例えば、 _00100110 を補数表現にした値 _11011010 という数は、00100110 を、 100000000 から引いたときの値になってる、本当は 0 から引いたのに。つまり 100000000 借金してる状態なのです。 補数を足して最上位桁の1つの上の桁への繰上がりが起き、 100000000 を捨ててるように見えても、実際は、 100000000 の借金を返しただけなのです。 もしその繰り上がりが起きなかったら、 100000000 の借金を返えせていない、 本当の数は、計算で出て来た数より 100000000 小さい数ということ、 つまり、マイナス側にオーバーフローしたということです。 符号付整数でも似たような話で、 符号付整数では、最上位桁が1の場合は負を表しますが、 負を表してる場合、 本当の数は、そこに示されてる数より 100000000 小さい数 ということです、100000000 借金したままということです。 0以上から負に変わったとき、100000000 借金し、 負から0以上に変わったとき、100000000 の借金を返す、 というのが、その都度、起きてるのです、符号付整数の場合は。

話が逆と言うか、足し算で引き算を行う方法として補数を利用し、最上位桁の桁上がり分を無視する前提条件なのです。 つまり、最上位桁の桁上がり分を無視すれば引き算の結果に等しく、無視しないと引き算の結果としては、文字どおり桁違いに大きな数になります。

概念としては「桁上がりを無視する」のですが、補数は実際にコンピュータで数値を扱うためのテクニックであり、実際の機械では「上がった桁を処理するモノがない」ので考えなくてよい/考えられないから、です。 そろばん...って最近は小学校で少しだけ触ったりはするのでしょうか? その知識があれば、そろばんの左の端っこの方で計算すると桁が上がったときに珠がない、という例えで理解できそうな気がするのですけれど。 あるいは、書き込み欄が決まった桁数しかない解答用紙、と言ってもいいでしょうか。 解答欄が4桁分 □□□□ しかなければ、そこに 0011 と入れるしかないのです。 質問のように4桁の数値で話をするなら、それは4桁までしか扱えない装置(解答欄の桁数がない計算用紙)で扱うことが前提なのです。

「二進数の補数の減算」を教わっているつもりなのでしょうが、実は「コンピューターの勉強の基礎知識」を教わっているからです。 本来ならば桁上がりを無視してはいけません。ですが、日常生活では二進数も二進数の補数も関わることはありません。コンピューターの勉強の基礎知識でしかないのです。そしてコンピューターは(32ビットとか64ビットとかの)計算の上限があって、そこからの桁上がりを無視します。 なので「どうせ最終的には桁上がりを無視するコンピューターの話をするんだから、最初から桁上がりを無視して教えても良いよね!その方が楽だもんね!」ってことで、桁上がりを無視します。