2進数の加減算〜8ビット(桁数Nが8の場合)〜

  x:とy:に数値を入力して、「+」ボタンを押してみて下さい。

 表現方式:符号無し符号+絶対値1の補数2の補数バイアス
符号無し
x:(10)(2) …X
y:(10)(2) …Y
x+y: (10)(2) 正しい計算
(10)(2) X, Yの形式的加算
x, y, x+y∈[0, 255]([0, 2N-1])
X = x, Y = y
x + y = X + Y

・正+正で正になるときは、桁あふれしない限り、
 形式的加算で正しい計算ができる
・正−正は2の補数を加算(正+(-正))して、
 正になるとき、形式的加算でOK!(C=1)
 負になるとき、形式的加算でNG!(C=0)
符号+絶対値
x:(10)(2) …X
y:(10)(2) …Y
x+y: (10)(2) 正しい計算
(10)(2) X, Yの形式的加算
x, y, x+y∈[-127, 127]([-(2N-1-1), 2N-1-1])
X = sx・|x|, Y = sy・|y|
・正しい計算方法は:
 ・sx=sy のとき
  x + y = s・( |x|+|y| )
 ・sx≠sy のとき
  x + y = smax(|x|,|y|)・( max(|x|,|y|)-min(|x|,|y|) )

・正+正で正になるときのみ
 x + y=X + Y でOK!
1の補数
x:(10)(2) …X
y:(10)(2) …Y
x+y: (10)(2) 正しい計算
(10)(2) X, Yの形式的加算
x, y, x+y∈[-127, 127]([-(2N-1-1), 2N-1-1])
・x, y≧0 のとき X = x, Y = y
・x, y<0 のとき X = 255 - |x| = 255 + x, Y = 255 - |y| = 255 + y

・正+正で正になるとき
 x + y=X + Y でOK!
・正+負で正になるとき
 x + y≠X + Y = x + y + 255 で1ずれる!
・正+負で負になるとき
 255 + x + y=X + Y = 255 + (x + y) でOK!
・負+負で負になるとき
 255 + x + y≠X + Y = 255 + (x + y) + 255 で1ずれる!
2の補数
x:(10)(2) …X
y:(10)(2) …Y
x+y: (10)(2) 正しい計算
(10)(2) X, Yの形式的加算
x, y, x+y∈[-128, 127]([-(2N-1), 2N-1-1])
・x, y≧0 のとき X = x, Y = y
・x, y<0 のとき X = 256 - |x| = 256 + x, Y = 256 - |y| = 256 + y

・正+正で正になるとき
 x + y=X + Y でOK!
・正+負で正になるとき
 x + y←X + Y = x + y + 256 でCを無視すればOK!
・正+負で負になるとき
 256 + x + y=X + Y = 256 + (x + y) でOK!
・負+負で負になるとき
 256 + x + y←X + Y = 256 + (x + y) + 256 でCを無視すればOK!
バイアス(B=(10)= (2)
x:(10)(2) …X
y:(10)(2) …Y
x+y: (10)(2) 正しい計算
(10)(2) X, Yの形式的加算
x, y, x+y∈[-B, 255-B]([-B, 2N-1-B])
X = x + B, Y = y + B
x + y + B≠X + Y = x + y + 2B

・常にバイアス分だけずれる!
・B=128 のときは、
 結果が正になるとき
  x + y=X + Y - 256 なのでCを無視して、
 結果が負になるとき
  256 + x + y=X + Y なのでそのまま、
 2の補数表現で結果が得られる!
☆色々試してみて、「2の補数表現」を使う利点について考えてみよう!

戻る
ご意見などはこちらまで deguchi@kc.kobe-c.ac.jp ご質問等もお気軽に!
Copyright © 2005 DEGUCHI Hiroshi, All Rights Reserved.