こんにちは。きんくまです。
Cの基礎を勉強しておりまして、バイトとビットについて理解が必要になりました。
なので、その成果を書こうと思います。読んでいる方の参考まで。
ビット
ビットは0と1を表します。ビットは普通2進数を表すのに使われます。
具体例です。
2進数 | 10進数 | ビット数 |
0 | 0 | 1 |
1 | 1 | 1 |
10 | 2 | 2 |
11 | 3 | 2 |
100 | 4 | 3 |
111 | 7 | 3 |
1000 | 8 | 4 |
1010 | 10 | 4 |
1111 | 15 | 4 |
4ビットは10進数で0から15までを表すことができます。
だから、16種類の数字を表すことができます。
ところで、16進数についてです。
Cでは16進数は値の前に0xをつけて表します。それでは、16進数の列を上の表につけてみましょう。
2進数 | 10進数 | 16進数 | ビット数 |
0 | 0 | 0x0 | 1 |
1 | 1 | 0x1 | 1 |
10 | 2 | 0x2 | 2 |
11 | 3 | 0x3 | 2 |
100 | 4 | 0x4 | 3 |
111 | 7 | 0x7 | 3 |
1000 | 8 | 0x8 | 4 |
1010 | 10 | 0xA | 4 |
1111 | 15 | 0xF | 4 |
バイト
バイトは普通8ビットを表します。
バイトが10進数でどのくらいの範囲を表すかわかりますか?
前の項目で4ビットは0から15までを表すと書きました。
それで、8ビットは4ビット+4ビットなので、こんな感じに表すことができます。
16 * 16 = 256
だから、8ビットは10進数で0から255までの、256種類の数字を表せます。
では、さきほどの表を8ビットに拡張してみましょう。
2進数 | 10進数 | 16進数 | ビット数 |
0 | 0 | 0x00 | 1 |
1 | 1 | 0x01 | 1 |
10 | 2 | 0x02 | 2 |
11 | 3 | 0x03 | 2 |
100 | 4 | 0x04 | 3 |
111 | 7 | 0x07 | 3 |
1000 | 8 | 0x08 | 4 |
1010 | 10 | 0x0A | 4 |
1111 | 15 | 0x0F | 4 |
10000 | 16 | 0x10 | 5 |
10001 | 17 | 0x11 | 5 |
11111 | 31 | 0x1F | 5 |
100000 | 32 | 0x20 | 6 |
111111 | 63 | 0x3F | 6 |
1000000 | 64 | 0x40 | 7 |
1111111 | 127 | 0x7F | 7 |
10000000 | 128 | 0x80 | 8 |
11111111 | 255 | 0xFF | 8 |
んー。ぱっと見、難しそうです。でも、少しずつ見ていけば簡単にわかります。
10進数64を見てみましょう。
2進数 | 10進数 | 16進数 | ビット数 |
1000000 | 64 | 0x40 | 7 |
最初に2進数を2つに分けます。4ビットごとにしました。
100 – 0000
左側は100。これは16進数で0x4です。
右側は0000。これは16進数で0x0です。
だから、16進数では、これは0x40と表されます。
ASCII表
ASCII 表は文字コードの表です。
>> ASCII Table and Description
ASCIIコードを前に作った表に足してみましょう。
2進数 | 10進数 | 16進数 | ASCII文字 | ビット数 |
0 | 0 | 0x00 | NUL | 1 |
1 | 1 | 0x01 | SOH | 1 |
10 | 2 | 0x02 | STX | 2 |
11 | 3 | 0x03 | ETX | 2 |
100 | 4 | 0x04 | EOT | 3 |
111 | 7 | 0x07 | BEL | 3 |
1000 | 8 | 0x08 | BS | 4 |
1010 | 10 | 0x0A | LF | 4 |
1111 | 15 | 0x0F | SI | 4 |
10000 | 16 | 0x10 | DLE | 5 |
10001 | 17 | 0x11 | DC1 | 5 |
11111 | 31 | 0x1F | US | 5 |
100000 | 32 | 0x20 | Space | 6 |
111111 | 63 | 0x3F | ? | 6 |
1000000 | 64 | 0x40 | @ | 7 |
1000001 | 65 | 0x41 | A | 7 |
1010001 | 97 | 0x61 | a | 7 |
1111111 | 127 | 0x7F | DEL | 7 |
10000000 | 128 | 0x80 | 8 | |
11111111 | 255 | 0xFF | 8 |
10進数で127より上では、いくつかの拡張ASCII表の種類があるようです。
だから、今回は記入しませんでした。
さて、文字Aの行を見てみます。
2進数 | 10進数 | 16進数 | ASCII文字 | ビット数 |
1000001 | 65 | 0x41 | A | 7 |
文字Aは10進数で65で、16進数で0x41です。
Cでの文字と整数
前の項目では、文字コードと10進数、16進数の関係を書きました。
それをもとに、Cのコードを書いてみます。
#include <stdio.h> int main(int argc, char const *argv[]) { char c, c2; int i, j; c = 'A'; printf("c is %c. character code is %d, binary is %x\n", c, c, c); //出力 //c is A. character code is 65, binary is 41 i = 97; printf("i is %c. character code is %d, binary is %x\n", i, i, i); //出力 //i is a. character code is 97, binary is 61 //char to int j = c; printf("j is %c. character code is %d, binary is %x\n", j, j, j); //出力 //j is A. character code is 65, binary is 41 //int to char c2 = i; printf("c2 is %c. character code is %d, binary is %x\n", c2, c2, c2); //出力 //c2 is a. character code is 97, binary is 61 return 0; }
1バイトより上について
1バイトについて、今回は書きました。でも、普段のプログラミングでは1バイト以上を扱うことがあります。
なので、次回の記事ではそのことについて書こうと思います。
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ