コンピュータ内部で計算を行う場合には2進数が利用されている。これによりコンピューターは電圧の高低や、磁極のS極・N極となどでデータを扱うことができる。このためコンピュータはスイッチのON/OFFのような二元論で処理を行っている。
コンピュータはスイッチのON/OFFのような二元論で処理を行っている。これだと数値を扱う場合、スイッチのOFFは「0」を意味し、ONは「1」を意味すると設定しても「2」以上の数値を表すことができない。このため2以上の数値を表す場合は複数のスイッチを用いて表現する。この場合、2以上で桁上がりしていくことになるので2進数が用いられる。この「0」か「1」かを表す信号をビットと呼ぶ。通常はこのビットを8桁でまとめて扱い、これをバイトと呼ぶ。バイトはコンピュータの情報量の単位として用いられる。
バイト | 8ビット | 7ビット | 6ビット | 5ビット | 4ビット | 3ビット | 2ビット | 1ビット |
---|---|---|---|---|---|---|---|---|
2進数 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
電圧 | 低 | 高 | 低 | 低 | 低 | 高 | 低 | 低 |
2以上の数値を利用するには複数のビットを同時に扱う必要がある。これは数値に限らず文字や色といった要素も同様で、このため同時に扱えるビット数がコンピュータの性能に影響してくる。同時に扱えるビット数が8ビットであれば自然数で0~255まで、文字数で256文字まで扱える。また、8ビットの場合でも2バイトで1文字分とするなどマルチバイト化することでより情報幅を広げることが可能となる。
数値を表すのに一般的に使われている10進数は数を「0」~「9」で表現し、各桁が10になると桁上がりする。
1桁目は100=1 (一の位)
2桁目は101=10 (十の位)
3桁目は102=100 (百の位)
4桁目は103=1000(千の位)…
2進数は数を「0」と「1」で表現し、各桁が「2」になれば桁上がりする。
1桁目は20=1
2桁目は21=2
3桁目は22=4
4桁目は23=8
16進数は数を「0」~「F」で表現し、16毎に桁上がりする数値。4ビット(2進数の4桁)で1桁となるため1バイトで2桁となる。コンピュータのデータを表現するには2進数や10進数を用いるよりもむしろ簡単なので利用されている。
10進数 | 2進数 | 16進数 |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
16進数では9より後の「10」~「15」までは対応する数字がないため英文字の「A」~「F」を利用する。
3 | D | 0 | A |
163 | 162 | 161 | 160 |
4,096×3 | 256×13 | 16×0 | 1×10 |
12,288 | 3,328 | 0 | 10 |
3D0A
= 12,288 + 3,328 + 0 + 10
= 15,626
16で割った余り(15から0の数)を各桁の値とし、割り切れなくなるまで続ける。
例)15,626を変換
16) 15,626
16) 976…余りA(1桁目)
16) 61…余り0(2桁目)
16) 3…余りD(3桁目)
3…余り3(4桁目)
16進数の1桁は2進数の4桁にあたるので1桁の16進数を4桁の2進数に、または4桁の2進数を1桁の16進数に変換する。
例)30DAと0011000011011010の変換
3 ⇔ 0011
0 ⇔ 0000
D ⇔ 1101
A ⇔ 1010
コンピュータでは四則演算をビット反転とビットシフト及び論理演算(加算器による加算)を利用して行う。負の数を扱う場合は符号付き数値表現、小数点以下の値を扱う場合は浮動小数点数を用いる。
論理演算(加算器)により計算を行う。
4ビット目 | 3ビット目 | 2ビット目 | 1ビット目 | |
---|---|---|---|---|
3 | 0 | 0 | 1 | 1 |
2 | 0 | 0 | 1 | 0 |
5 | 0 | 1 | 0 | 1 |
ビット反転(2の補数)により、左辺の負の数を求めたうえで、加算を行う。
4ビット目 | 3ビット目 | 2ビット目 | 1ビット目 | |
---|---|---|---|---|
3 | 0 | 0 | 1 | 1 |
-2 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
右辺の各桁が0であれば0を、1であれば左辺の数を桁ごとに左へ1ビットづつずらした数を加算する。
4ビット目 | 3ビット目 | 2ビット目 | 1ビット目 | |
---|---|---|---|---|
3 | 0 | 0 | 1 | 1 |
2 | 0 | 0 | 1 | 0 |
6 | 0 | 1 | 1 | 0 |
0011
× 0010
0000…0011の0000倍なので0
0011 …0011の0010倍なので00110(左に1ビットシフトする)
0000
0000
0000110
※ひっ算で各桁ごとに乗算(2進数は0と1しかないので、0か同値になる)して上位桁ごとに1桁繰り上げる(左1ビットシフトシフト)した数を加算していけば、乗算ができる。
右辺の各桁が0であれば0を、1であれば左辺の数を桁ごとに左へ1ビットづつずらした数を加算する。
4ビット目 | 3ビット目 | 2ビット目 | 1ビット目 | |
---|---|---|---|---|
6 | 0 | 1 | 1 | 0 |
3 | 0 | 0 | 1 | 1 |
2 | 0 | 0 | 1 | 0 |
10
11) 110
011…減算する(2の補数をである101で加算)
0000
※通常の除算のひっ算と同じく、左辺の割り切れる(2進数は0と1しかないので減算してマイナスにならない)桁位置を1とし、右辺で減算を行う。残りが右辺の値以下になればそこで終了する。
文字集合(character set)とは、各種文字を集めてコンピュータが表現できるように符号化したもの。符号化文字集合とも呼ぶ。文字集合にはこれを実装した文字コードが存在し、規格として定められている。文字集合を管理する団体としてはIANA*が一般的に知られている。
文字集合はコンピュータで利用できるように、各団体により7~8ビットで符号化されている。
American Standard Code for Information Interchangeの略で1963年にANSI*(当時はASA)によって規格化された符号化文字集合。ANSIコードとも呼ばれる。国レベルでは最も古い規格で、その後の国際的な文字集合の基礎となっている。アルファベットや基本的な制御文字を設定している。7ビット長。
ISO*とIEC*が合同で規格化した符号化文字集合。ASCIIコードを拡張し、ヨーロッパでつかわれるアルファベットを追加している。1部から16部が存在し、それぞれISO/IEC 8859-1~ISO/IEC 8859-16と表記される。8ビット長。
ISOとIECが合同で規格化したマルチバイト*文字コード。8ビットシングルバイトでは表現できない漢字圏の言語も含めて複数の文字集合を単一の符号化文字集合として扱うために制定された。
ISOとIECが合同で規格化したUnicode互換符号化文字集合。USC(Universal Coded Character Set)と呼ばれ、後述するUnicodeがコンピューター業界主導で整備されたのに合わせて制定された。
JIS*により規格化された符号化文字集合。ISO/IEC 8859と同様、ASCIIコードを拡張し、カタカナなどを追加している。8ビット長。
JISにより規格化されたマルチバイト符号化文字集合。JIS漢字コードとも呼ばれる。アルファベット、数字、JIS第1水準、JIS第2水準漢字などを全角文字*で表現する。7と8ビットダブルバイト。
JISにより規格化されたマルチバイト符号化文字集合。JIS X 0208にJIS第3水準、JIS第4水準漢字などを追加した。7と8ビットダブルバイト。
JISにより規格化されたISO/IEC 10646準拠の符号化文字集合。国際符号化文字集合と呼ばれる。JIS X 0201、JIS X 0208、JIS X 0213を網羅する。
中華人民共和国の国家標準化管理委員会が定めた。簡体字符号化文字集合。
符号化文字集合は規格のままでは実装することはできない。シングルバイトとマルチバイト文字の併用や、他の規格の混在を考慮して再符号化しなければならない。これをエンコード(文字符号化方式)と呼ぶ。
コンピューター産業界が文字符号化方式の統一を図る目的で整備した。全世界のすべての文字を符号化することを目標としている。
8ビットトリプルバイト。現在、最も浸透しているUnicode。
マイクロソフト社の文字符号化方式。当然ながらマイクロソフト製品で利用される。各国の符号化文字集合の規格に合わせて設定されている。
JIS X 0208とJIS X 0201およびNECとIBMの環境依存文字を組み合わせた符号化方式。8ビットダブルバイト。
中国でつかわれる簡体字の符号化方式。GB-2312に準拠
Extended Unix Codeの略で主にUnix上でつかわれる。各国の符号化文字集合の規格に合わせて設定されている。
ASCIIとJIS X 0208を組み合わせ、ISO/IEC 2022に適合する符号化文字集合方式。
GB-2312に準拠。中国簡体文字。
韓国でつかわれる、ハングル文字などを含む。
Extended Binary Coded Decimal Interchange Codeの略で、ASCII以前からあるIBM社独自の文字集合。現在でも主にメインフレームやワークステーションでつかわれている。
ISO/IEC 2022に基づいて設計された日本語コード。JISコードとも呼ばれる。電子メールソフトなどで主に利用される。