0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

2進数の足し算と引き算 2進数の計算と数値表現

Posted at

コンピュータの得意な処理

コンピュータは足し算がとても得意。
回路を単純に保つため。

しかし
足し算は知っているが、引き算、掛け算、割り算は知らない。
コンピュータは工夫してそれ以外の計算を行なっている。

気づき

足し算以外知らないのは知らなかった。
どんな工夫をしているのか?
これから期待だ。

足し算しか概念がないコンピュータに引き算を理解させる。

足し算しか知らないので足し算で引き算を行う。
それは負の数を表現すること。
負の数で足すと引き算になる。

気づき

どうやって負の数を表現するのか?

負の数のあらわし方

最初の一桁が0の時 正の数
1の時 負の数
2進数で表された3と−3を足し合わせても0にはならない。
00000011+10000011=10000110になる。

そのために補数を使う。
それはその桁数での最大値を得るために補う数次の桁に繰り上がるために補う数という2つの補数がある。

気づき

そもそも補数は必要なのかうまく想像できない。
補数は計算を完了させるために設けられていると思っている。
10進数の場合は補数は要らないのかな?
負の数を表すために一桁で表すからどうやって引くのか?
そうか負の数を作るための補数なのか。

10進数の補数の場合

桁数での最大値を得るために補う数(123の場合)

999から123を引けばその数の補数を得ることができる。
これを9の補数

次の桁に繰り上がるために補う数(123の場合)

1000から123を引けばその数の補数を得ることができる。
これを10の補数

2進数の補数を求める(これが問題だ)

0011これは3を意味する。
この桁の最大値は1111になる。
そこから1111から0011を引くと1100になる。(これが1の補数になる)

一桁上げるための補数
10000から0011を引くと1101になる。(これが2の補数になる)

00000011(3)+11111101を足すと100000000になる。
8ビット部分だけをみれば全部0になる
負の数を表すには2の補数で表す

気づき

なんか8ビットだけをみると0になると説明されてもわからないが
こう表現されるのであれば仕方がない。
理解はできないけどこうなるのなら覚えよう。
2の補数は負の数

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?