2の補数表現・2012/05/02の授業の補足

情報処理(講義)のページ , www.kameda-lab.org (2012/05/09, 06/15a)

要約

補数表現を用いれば、減算を加算だけで求めることができるという話です。

N進数におけるXという数値ののN−1の補数表現は、桁数を指定したうえで全桁をN−1とした数字からXを引くことで得られます。
例:10進数における169の「10−1の(9の)補数表現」:3桁が指定された場合、999−169=830
例:10進数における169の「10−1の(9の)補数表現」:5桁が指定された場合、99999−169=99830
例:4進数における112の「4−1の(3の)補数表現」:4桁が指定された場合、3333−112=3221

N進数におけるXという数値ののNの補数表現は、桁数を指定したうえで得られたN−1の補数表現に1を加算することで得られます。
例:10進数における169の「10の補数表現」:3桁が指定された場合、9の補数表現830に1を加算して831
例:10進数における400の「10の補数表現」:3桁が指定された場合、9の補数表現599に1を加算して600
例:4進数における112の「4の補数表現」:4桁が指定された場合、3の補数表現3221に1を加算して3222

「345 - 169 = 176」の計算例

※ここは全て10進数で表現

計算の意味:
345 - 169 の代わりに、 345 + (169の10の補数表現) を計算することで、同じ結果を得る。
345 + ( (999-169) + 1 ) = (999+1) + 345 - 169 = 1000 + (345-169) = 1000 + 176
最上位桁(1000)を無視すれば、176 は 345 - 169 に一致する。

手順:
(1) 169の9の補数:830
(2) 169の10の補数(=9の補数+1): 830 + 1 = 831 (※(1)(2)の代わりに1000-169を直接計算してもよい)
(3) 345 - 169  ⇒ 345 + 831 = 1176 ⇒ 最上位の4桁目を外して「176」が解

「25 - 13 = 12」の計算例

※ここは全て10進数で表現

計算の意味:
25 - 13 の代わりに、 25 + (13の10の補数表現) を計算することで、同じ結果を得る。
25 + ( (99-13) + 1 ) = (99+1) + 25 - 13 = 100 + (25-13) = 100 + 12
最上位桁(100)を無視すれば、12 は 25 - 13 に一致する。

手順:
(1) 13の9の補数:86
(2) 13の10の補数(=9の補数+1): 86 + 1 = 87
(3) 25 - 13 ⇒ 25 + 87 = 112 ⇒ 最上位の3桁目を外して「12」が解

※同じ手順を2進数で表現

計算の意味:
11001 - 01101 の代わりに、 11001 + (01101の2の補数表現) を計算することで、同じ結果を得る。
11001 + ( (11111-01101) + 1 ) = (11111+1) + 11001 - 01101 = 100000 + (11001-01101) = 100000 + 01100
最上位桁(100000)を無視すれば、01100 は 11001 - 01101 に一致する。

手順:
(1) 01101の1の補数:10010 (2進数だと実質0⇔1反転させるだけでよいので簡単)
(2) 13の2の補数(=1の補数+1): 10010 + 1 = 10011
(3) 11001 - 01101 ⇒ 11001 + 10011 = 101100 ⇒ 最上位の6桁目を外して「01100」が解

注意

・計算を始める前に「大きい数 - 小さい数」になるように最初に整えておく必要があります。


kameda[at]iit.tsukuba.ac.jp