スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2の補数の話



超絶お久しぶりですね。
いない間にシン・ゴジラにはまったりゴーストが終わったりスマホぶっこわれたり
まさか一人暮らしすることになったりしました。
一人超楽しい。

さて、いろいろあって来年春季の応用情報受けることになったのでお勉強。

今回は初心に戻って1の補数と2の補数の話。
こちらがすごくわかりやすかった。
2の補数を理解する (1) - とあるソフトウェア開発者のブログ

まず前提として、ある数値をビット桁指定して表現するとします。
桁指定が重要です。

例えば、10進数の3を4ビットの2進数で表現すると
3→0011

10進数の17を8ビットの2進数で表現すると
17→00010001

という具合。


1の補数
「Xの2進表現」と「Xの1の補数」の2進表現を加算すると0になる。
 ⇒すなわち1の補数とは、ビット反転させたもの。

2の補数
「Xの2進表現」と「Xの2の補数の2進表現」を加算すると、2^nになる。
 →すなわち2の補数とは、1の補数に1を足したもの。

4ビットだと-8~7までの数値を表現できます。

十進数-8-7-6-5-4-3-2-1
二進数10001001101010111100110111101111

十進数01234567
二進数00000001001000110100010101100111


補数表現した2進数を10進数に戻すには、最上位(符号ビット)を負数として計算してやればよいです。

-6 → 1010 → -8+2 = -6


2の補数を使うと、引き算が足し算でできるようになるます。

4ビットの2の補数を使った引き算の例
・5-3 = 5+(-3) = 2
  0101
ー)1010
----------
 10010 → 溢れた桁を切り捨てる → 0010 → 2

・5-5 = 5+(-5) = 0
  0101
ー)1011
----------
 10000 → 溢れた桁を切り捨てる → 0000 → 0

・5-6 = 5+(-6) = -1
  0101
ー)1010
----------
  1111 → 2の補数表現 → 1を引いて → 1110 → 反転 → 0001 → 1

というわけで、2の補数を再確認した話でした。



続きを読む

スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。