[解決済み] 大きな符号なし2進数から小さな2進数の引き算
質問
コンピュータの構成とアセンブリ言語のコースを受講しています。 今週の研究室の筆記試験で、ある質問があり、困っています。 問題の内容は...
次の符号なし2進数を引き算しなさい(ボロービットとオーバーフロービットを表示すること)。 2の補数には変換しないでください。
0101 0111 1101
-1110 1011 0110
--------------
という答えが返ってきたと実感しています。 -1001 0011 1001 しかし、この引き算を実際に行うために、大きい方の数字を取って小さい方の数字から引き、自分の仕事を示すために、どのように借りればいいのかがわからず、困っています。 私のこれまでの人生では、小さな数から大きな数を引くときは、問題を逆にして、代わりに大きな数から小さな数を引き、結果の前に負の符号を付けてきました。 教授に尋ねると、この問題は書かれたとおりに解いてほしいと言うのです。 私はこの問題を、通常のように大きい数から小さい数を引いて否定して解くことは許されないのです。 ネットで調べても、大きい符号なし2進数から小さい符号なし2進数を引く例題は見つかりませんでした。
このシナリオで引き算を実行する方法について、どなたか説明していただけると本当にありがたいです。
更新しました。 アレックスの言うとおりです。 教授が探していたのは
0110 1100 0111 (1735)
皆さん、ありがとうございました。
解決方法は?
どの数字が大きく、どの数字が小さいかに関係なく、同じ方法で行います。
bb b bb <- borrows
0101 0111 1101 (1405)
-1110 1011 0110 (3766)
--------------
0110 1100 0111 (1735?)
さて、適切な差分を求める場合、上記の結果には符号ビットが含まれていないので、オーバーフローを考慮する必要があります。
b bb b bb <- borrows
0 0101 0111 1101 (1405)
-0 1110 1011 0110 (3766)
----------------
1 0110 1100 0111 (-2361 signed 2's complement)
本当に、CPUは何から何を引かれるかなんて気にしないんです。整数の足し算・引き算には同じアルゴリズムが使われていて、しかもこのアルゴリズムは符号付き整数でも符号なし整数でも同じです。結果とキャリーフラグ、オーバーフローフラグを正しく解釈すればいいのです。それだけだ。
関連
-
[解決済み] 回帰式 T(n) = 2T(n/2) + Θ(1) を代入して解きます。
-
[解決済み] 矩形を回転させる最も簡単な方法
-
[解決済み] バイトからメガバイトへの変換
-
[解決済み] 初心者の言葉で「NaN(Not a Number)」とは何か?[クローズド]
-
[解決済み] 2^(2n) = O(2^n)である。
-
[解決済み】「エントロピーと情報利得」って何?
-
[解決済み】なぜ10進数は2進数で正確に表現できないのですか?
-
[解決済み】最小値と最大値がわかっている数値の範囲を縮小する方法
-
[解決済み] 標準的な正規化ではなく、なぜソフトマックスを使用するのですか?
-
[解決済み] 緯度・経度をメートルに換算する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン