2014年1月7日火曜日

補数とは何だ!?

simple-routerのrouter_util.rbのソースに関係があったので、今回は補数について調べました。

補数とは、ある数字に足すと桁が一つ増える値の最小値の事です。
10進数の72の場合、桁が一つ増えた値は100になります。
72+28=100なので、72の「10の補数」は28です

2進数の1001の場合、桁が一つ増えた値は10000になります。
1001+0111=10000なので、1001の「2の補数」は0111です
2の補数の求め方は、元の値の「0」と「1」を反転して「1」を足します。

1001
 ↓
0110
これに+1をする
0111

2の補数の他に「1の補数」というのがあって、こちらは最後に「1」を足しません。
元の値の「0」と「1」を反転するだけです。

元の値に1の補数を足すと1埋めの数になります。
2進数1001の「1の補数」は以下のようにして求めます。

1001
 ↓
0110

元の値と1の補数を足すと1111になります。

1001+0110=1111

rubyの「~」で「1の補数」を求められます。
以上です。

0 件のコメント:

コメントを投稿