N進数の小数と10進数の小数の変換
10進数(整数) -> N進数(整数)
10進数をNで割り続けて、 余りを下から読むとN進数
10進数(小数) -> N進数(小数)
10進数にNを掛け続けて、整数部分を順に読むとN進数
N進数 -> 10進数
N進数の各桁の数字にN^(桁数)を掛けてあげる
プログラム上では...
例えば10進数の0.3は、
2進数で表すと循環小数になってしまうため、
有限なメモリを使う以上は、
その部分で誤差が生じてしまう。
(JavaではBigDecimal型なら誤差が生じない)
負数の表現(8桁の2進数を例に)
a. 符号付き絶対値表現
2進数の場合、最も大きな位が0なら+、1なら-。
それ以降の7桁が絶対値を示す。
01111111 = +127 ~ 11111111 = -127
00000000 = +0, 10000000 = -0 で重複。
b. 1の補数
ある数 + その数の1の補数 = 11111111
として、それらを10進数に変換した際、
ある数(10) + 1の補数(10) = 0
となるように、1の補数と負数を対応づける。
00000000 = +127 ~ 11111111 = -127
01111111 = +0, 10000000 = -0 で重複。
c. 2の補数(完全補数)
ある数 + その数の2の補数 = 100000000(9桁)
として、それらを10進数に変換した際、
ある数(10) + 2の補数(10) = 0
となるように、1の補数と負数を対応づける。
01111111 = +127 ~ 10000000 = -128
00000000 = 0 と1つに定まるので、
a, bに比べ、表現できる数が1つ増える。
(Javaのbyte型はこの例と同じ)