CPUは引き算を行うことができず、2の補数を用いて引き算を足し算として考えれると知りました。
そこで8bitの最上位桁を符号とした7bitの引き算-24+(-8)を計算してみたのですが
24(10進数)→0011000(2進数)→1101000(2の補数)
8(10進数)→0001000(2進数)→1111000(2の補数)
符号 7654321←bit
1 1101000
+1 1111000
X 1100000
となり、1100000の2の補数をとると
0100000(2進)→32(10進数)で答えを求められました。
そこでお聞きしたいのですが、値を足したとき(↑の例だと1100000)が求められたときにどういった条件だと1100000の2の補数をとる必要があるのでしょうか?
↑の例だとXがどの条件のときでしょうか?
質問が長くなってしまいましたがよろしくお願いします。
No.3ベストアンサー
- 回答日時:
> 24(10進数)→0011000(2進数)→1101000(2の補数)
→11101000(2の補数) …が正しい。
> 8(10進数)→0001000(2進数)→1111000(2の補数)
→11111000(2の補数) …が正しい
符号ビットをつけて「2の補数」になります。
計算は8ビットで加算をします。
(-24)+(-8)=
-(00011000)2-(00001000)
=(11101000)2
+(11111000)2
=(11100000)^2 …最上位の8ビット目から9ビット目への桁上がりは無視します、
=-(00100000)^2 …これば10進数の「-32」です。
>どういった条件だと1100000の2の補数をとる必要があるのでしょうか?
2の補数法表現を正しく認識されていないようです。8ビットで2の補数で計算をしへっかも2の補数法で出てきますので改めて2の補数をとる必要はありません。負の数か、正またはゼロの数かは先頭ビットで判別できます。
それが2の補数法の特徴です。
>↑の例だとXがどの条件のときでしょうか?
この質問はナンセンスです。
Xは8ビットの2の補数表現として求まります。そして先頭ビットで負数か、そうでないかを判別できます。
人間に分かりやすいようにする便法として、
10進数や普通の2進数に変換しますが、その際は
2の補数法表現を
符号と絶対値(符号なし数値)とに分離してやります。
先頭ビットがゼロならそのまま符号なし2進数(10進数の場合は10進変換してやる)になり、先頭ビットが1なら、符号「-」と絶対値(2の補数を取ってやれば絶対値が得られる)に分離して「-(符号なし2進数)」の形にしたり、10進数の場合は、符号なし2進数の箇所を10進変換してやります。
■■ 2の補数法は8ビットを使った2進数の表現法です。■■
演算も符号ビットを区別することなく、8ビットで行います。
結果として先頭ビットがゼロであれば正またはゼロの数、先頭ビットが1だと負数と分かるだけです。
解答ありがとうございます
ご指摘のとおり符号ビットもいれた8bitの演算でした
>8ビットで2の補数で計算をしへっかも2の補数法で出てきますので改めて2の補数をとる必要はありません。
>負の数か、正またはゼロの数かは先頭ビットで判別できます。
>それが2の補数法の特徴です。
とあるのですが、つまり
11101000 :24の2の補数
+11111000 :8の2の補数
11100000 :結果
11100000の最上位bitは1ということで負を表している。
そこで10進数に戻す際には2の補数を行い11100000→00100000になるということでしょうか?
また、
>2の補数法は8ビットを使った2進数の表現法です。
とあるのですが8bit以上の計算では2の補数は用いられないのでしょうか?
No.6
- 回答日時:
#3です。
A#3の補足質問の回答
> そこで10進数に戻す際には2の補数を行い11100000→00100000になるということでしょうか?
そうです。
11100000 → -(00100000) → -32
という手順で戻します。
>8bit以上の計算では2の補数は用いられないのでしょうか?
計算機で走っているソフト次第です。
大抵は倍精度の整数が扱えます。
普通のソフトの整数(単精度)では16ビットの2進数を扱っています。
(8ビットの2の補数による整数は8ビットマイコンの時代のマシン語やアセンブラなどで使われていました。)
倍精度整数では32ビットの2の補数法、4倍精度整数では64ビットの2の補数法が使われます。
No.5
- 回答日時:
#4です。
下記の「演算」は「足し算」と訂正させて下さい。計算を見てもらえば意をくみとっていただけると思いますが、訂正させてね。
>負数同士の演算は負にならないとね。
>どういった条件だと1100000の2の補数をとる必要があるのでしょうか?
回答者のみなさんが教えて下さっているのでなんですが、2の補数は、正の2進数から負の2進数を求めるときの計算方法だと考えると判りやすいかも。つまり真逆は、負の2進数から正の2進数を求める行為をしている。演算だけに限るなら2度手間だからする必要はないと。
あえてするなら2進-10進に変換したいときの中間処理かな?
No.4
- 回答日時:
こんにちは
符号bitも含めて演算するだけでよいのでは?
1110 1000
1111 1000 +
-----------
1110 0000
いうまでもないことですが 8 bitで正の最大値は +127 (0111 1111b)、負の最大値は -128(1000 0000b)なので、結果が上記の範囲内なら負数同士の演算は負にならないとね。
-128+(-1)だと?8 bitで表現できる範囲を超えるのでアンダーフローが発生し計算が成り立たなくなります。
実際の 8 bit の演算器を持つコンピューターなら、演算の状態を様々なフラグ(符号?、演算結果がゼロ?、下位4bitからの繰り上がり有無、結果が8bitの範囲内か、桁上がりがあるか..)で知ることが出来ますのでそれを見て異常処理を入れます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の6乗の答えと計算方法
-
2500を3対2でわける計算式おし...
-
8÷0=
-
累乗の逆(対数?)の計算方法を教...
-
パーセントの計算がまったく出...
-
割り算の説明
-
「逆数」って、何のためにある...
-
AとBの比というのはA/Bの...
-
素因数分解で最小公倍数・最大...
-
√2の証明によく出てくる言葉で...
-
割引の計算がよく説明と理解が...
-
4^0.5乗の答え
-
累乗の計算の仕方
-
~の~乗を計算機を使わずに簡...
-
Excel関数で、Nの1/3乗という...
-
至急回答おねがいします。 数学...
-
数学で、alphabetのxを、かけ算...
-
掛け算と割り算の混じった問題
-
期待値の問題
-
最も簡単な式?
おすすめ情報