[C] Cでのバイトとビット入門

2012/02/22

こんにちは。きんくまです。

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バイト以上を扱うことがあります。
なので、次回の記事ではそのことについて書こうと思います。

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

LINEスタンプ作りました!
毎日使える。とぼけたウサギ。LINEスタンプ販売中! 毎日使える。とぼけたウサギ

ページトップへ戻る