人間は10進数でコンピューターは2進数

## はじめに
プログラミングを学んだ時、2進数を知りました。
しかし、業務で使うわけではないので、流して来ましたが、[プログラムはなぜ動くのか　第２版　知っておきたいプログラムの基礎知識](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AF%E3%81%AA%E3%81%9C%E5%8B%95%E3%81%8F%E3%81%AE%E3%81%8B-%E7%AC%AC%EF%BC%92%E7%89%88-%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98-%E7%9F%A2%E6%B2%A2%E4%B9%85%E9%9B%84/dp/4822283151/ref=sr_1_1_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1DEME2U3RE8LK&dchild=1&keywords=%E3%81%AA%E3%81%9C%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AF%E5%8B%95%E3%81%8F%E3%81%AE%E3%81%8B&qid=1609204471&sprefix=%E3%81%AA%E3%81%9C%E3%83%97%E3%83%AD%2Caps%2C251&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEzODFLMFpLU0xLVzVKJmVuY3J5cHRlZElkPUEwNDM4NDY5MzlMRjFJMzQ2VlJKQyZlbmNyeXB0ZWRBZElkPUExR1AxUjNWSDg3OFcxJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==)を読み、2進数について気になり調べたことを共有いたします。

内容は人間とコンピューターと数え方の違いと2進数の計算方法になります。

## 2進数とは

> 二進数とは
>
> 「0」と「1」の組み合わせで表現される数字
> 
> であり
> 
> 「0」「1」「10」……のように、それぞれの桁の数字が「2」になると桁上がりする数字のこと
>
> です。

https://wa3.i-3-i.info/word1605.html

## 人間は10進数、コンピューターは2進数
人間は10進数で数えるが、コンピューターは10進数で数えることができず、
2進数を使います。

言語ごとに数値の言い方が違うのと同じ様なことかな:thinking:


| 言語 |1|2|3|4|
| ---- | ---- | ---- | ---- | ---- |
|日本語 | いち | に | さん | よん |
| 英語 | one|two | three | four |
| 中国語 | イー | アル | サン | スー |

| 数進数 |■|■■|■■■|■■■■|
| ---- | ---- | ---- | ---- | ---- |
| ２進数 | 1 |10 | 11  | 100|
| 10進数 | 1 |2 | 3  | 4|

## なぜコンピューターは2進数を使うのか？
コンピューターはICを使って数字を数えます。
しかし、ICは、1本のピンで0Vと5Vの2つの状態しか表すことができません。

そのため0、1、10、11、100と数えます。
![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502753/16c62255-cb1e-1dd9-8be2-0570e97afdf4.png)


##　なぜ人間は10進数を使うのか？
諸説はあるものの、人間の手足の指の本数に由来しているためらしいです。
[![Audi R8](http://img.youtube.com/vi/lFXRgR79Kys/0.jpg)](https://www.youtube.com/watch?v=lFXRgR79Kys&feature=emb_title "Audi R8")

##　2進数計算方法
まずは重みについて知りましょう。
> 10進数なら下位桁から1，10，100，1000，…と，桁が上がるごとに10倍されていきます。2進数の場合は，下位桁から1，2，4，8，…と桁が上がるごとに2倍されていきます。これを桁の「重み（おもみ）」と言います。10進数だから10倍，2進数だから2倍なのだと考えてください。

[【5分で覚えるIT基礎の基礎】ゼロから学ぶ2進数　第2回]
(https://xtech.nikkei.com/it/members/ITPro/ITBASIC/20020617/1/#:~:text=%E2%97%8F,-2%E9%80%B2%E6%95%B0%E3%81%8B%E3%82%89&text=2%E9%80%B2%E6%95%B0%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AF,%E3%81%A0%E3%81%A8%E8%80%83%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82)

**数値とは、その数値を構成する各行の数値に重みをかけた値を合計した結果で表します。**

| 数進数 |1桁目|2桁目|3桁目|4桁目|
| ---- | ---- | ---- | ---- | ---- |
| ２進数 |  2の0乗(=1)| 2の1乗(=2)|  2の2乗(=4)|  2の3乗(=8)|
| 10進数 | 10の0乗(=1)|10の1乗(=10) | 10の2乗(=100)| 10の3乗(=1000)|


10進数で数値を表すときは

|数値 |1桁目|2桁目|3桁目|4桁目|5桁目|6桁目|7桁目|8桁目|計算方法|
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| 39|  9×10⁰| 3×10¹| 0×10² | 0×10³ | 0×10⁴ | 0×10⁵ | 0×10⁶ | 0×10⁷ | 0+0+0+0+0+0+30+9 |
| 164|    4×10⁰| 6×10¹|  1×10²  | 0×10³ | 0×10⁴ | 0×10⁵ | 0×10⁶ | 0×10⁷ |  0+0+0+0+0+100+60+4 |

2進数で数値を表すときは

|数値 |1桁目|2桁目|3桁目|4桁目|5桁目|6桁目|7桁目|8桁目|計算方法|
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| 39|  1×2⁰| 1×2¹|   1×2² | 0×2³ | 0×2⁴ | 1×2⁵ | 0×2⁶ | 0×2⁷ | 0+0+32+0+0+4+2+1 |
| 164|  0×10⁰| 0×10¹|  1×10² | 0×10³ | 0×2⁴| 1×2| 0×2⁶ |  1×2⁷  | 128+0+32+0+0+4+0+0|

## 参考
[二進数](https://wa3.i-3-i.info/word1605.html)
[なぜコンピューターは2進数を使うのか](https://xtech.nikkei.com/atcl/learning/lecture/19/00007/00001/?P=4)
[【基本情報】なぜ、コンピュータで2進数を使うの？](http://seskillup.jp/computer-2sinsuu/)
[数学的に美しいのは「12進法」なのに私たちが「10進法」を使っている理由](https://nazology.net/archives/19021)