ITスクールの授業3日目のまとめ :進数とアスキーコード(ASCII CODE)&ユニコード
前書き
人間は日常生活で数字を10進数で扱っている。しかし、コンピューターは数字を0と1しか分からなくて、実際にプログラマーが入力した10進数も2進数に変換して演算などをする。
そのため、プログラマーはコンピューターが2進数の数字をどう扱って処理するかを知る必要がある。今回はコンピューターのデータの単位であるビット及びバイトを2進数でどう表すかを主に調べて、共に文字型である「char」型がどう文字を扱うかを調べる。
プログラミングで使う進数の種類
プログラミングで使われる進数は下記のようである。
-
10進数:人間が日常生活で1番よく使う進数。0~9までの数を通じて数字を表示する。
EX) -7、15、33、10 -
2進数:コンピューターが使える唯一の進数。0と1だけを表示できる。コンピューターが扱うデータの最小単位である「びっと(bit)」は、この0とか1の値を1つ持ってる単位である。コンピューターはそのびっとが8つ揃ったバイト(byte)に書かれてある0と1だけを演算して全ての数を扱う。
EX)1101、11100011、000000000000000000000000000001101 -
8進数:0~7までの数を使って数字を表示する。2進数の数字が長いので、8進数に変換するともっと短い数字で表示することができる。
変換の仕方:2進数の数字を3つづつ分けて、分けた2進数を8進数に変える。
EX)11100011->343、11011011111->3337。 -
16進数:0~9まで、またA~Fまで使って数字を表示する。16進数も長い2進数表示を短くするために使う。
変換の仕方:2進数の数字を4つづつ分けて、分けた2進数を16進数に変える。
EX)1101010010111011ー>D4BB、1111111111111111ー>FFFF
コンピューターの2進数の扱い方:負数はどう表現するのか
上記の通り、コンピューターは数字を0と1という2進数しか扱わない。ならば、コンピューターの内部で、私たちが代入したデータはどう変換されているのだろう?
とりあえず、コンピューターはユーザーがあるデータ型で10進数を入力すると、データ型によるメモリー空間に、10進数を2進数に変換して覚える。
int a = 5; // int型の容量のメモリー(4byte)で、2進数に変換する。
//結果 --> 00000000 00000000 00000000 00000101
さらに知っておくべきことは、2進数で負数も表示しないといけないということだ。そのため、2進数数字の一番左の(最上にもなる)値によって、その数が負数か正数かを決める。
負数を「‐」を付けて表せないという特徴で、10進数では正数を負数に変えるには「-」を付けると終わるが、2進数では「2の補数計算」を通じて変えないといけない。詳しい変換の仕方は下記のURLを見てみよう。
実数も2進数で表現しなければならない。しかし、実数は整数と異なって、小数を表そうとすれば決まってあるデータ型の容量では少ない範囲しか表現ができない。そのせいで、実数を2進数に表現する時は「浮動小数点」という形式で表すす。詳しい説明は下記のURLを見てみよう。
文字型は内部でどのように扱われるかーアスキーコード(ASCII CODE)、ユニコード(UNICODE)
文字型のデータ型も、変数に文字を入力するように見えるが、内部では2進数の数字で入力される。そのせいで、文字型の変数にある範囲の整数を入力してもエラーが発生しない。
char A = 65;
System.out.println(A);
//エラーが発生せず、文字「A」が出力する。
文字型は、内部的には2byteの正数になっており、出力をする時にその数字に1対1に対応する文字に変換して見せることである。
その正数ー文字を1対1対応させる規則がアスキーコードとユニコードである。もともとアスキーコードがあったが、もっと多い文字を変換するためにユニコードが作られた。
上の「A]はアスキーコード上で「65」に対応するので、65が入力できて、出力すると65に対応する「A」と表現されることである。
WEB開発をすると、あのアスキーコードやユニコードを知っておく方がいいと先生がおっしゃった。理由は後でわかると思う。
以上で、コンピューターが2進数を内部でどのように扱うかを調べてみた。人間は日常で2進数を使わないので、初めて0と1の並べを見ているとすごい難しいと思うが、だんだん慣れないといけないことがすこしは分かった気がする。
次は、コード上でデータを入力するのでなく、プログラムを実行してからデータを入力する方法、「Scanner」を調べてみる予定である。
Discussion