[前へ]   [目次へ]   

数値表現(X進法)


数値表現とは、特定の数をどのように記述するかということです。

普通人間が数を数える場合、1,2,3,4,5,6,7,8,9,10,11・・・のように数えますね。
しかし、コンピュータにとってはこの数え方はあまり得意ではありません。

「コンピュータの中では0と1だけで管理している」とよく言いますが、
これはメモリの構造がスイッチの塊であるため、事実です。
このスイッチがOFFかONか、それが0と1に置換えられて処理されています。
そして、このスイッチ、ソフトウェア側からは「ビット」と呼ばれます。

ところで、0と1だけでは2つしか値を表せません。
そこでいくつかを一まとめにしてより大きな数値を表現します。

有名なものは、8ビットをまとめた「バイト」でしょう。
1バイトは2の8乗、256種類の値を表現できます。
   (ファミコン時代には値の上限が255のパラメータ等があるゲームがよくあったのですが、これに起因しています。
   256じゃないのは0があるからです)


もっと大きな値が欲しければ16ビット、32ビットと多くをまとめればいいのですが・・・
CPUが1度に演算できるビット幅というのは限度があるわけで、
それを越えると・・・
何度も演算を繰り返し、結果を求めなければならないので、一気に遅くなります。
CPUが1度に演算できるビット幅の限界は・・・
XビットのCPUとかゲーム機とかでよく言ってた、あのXビットの部分、アレが大体この限界のはずです。
   というか、基本的にこの幅か他のいくつかの幅でしか演算できないのですが(笑)
   現在PCで使われているのは主に32ビットCPUなのですが・・・何故か64ビット演算も可能です。
   64ビットぐらいはないと困るからあるのかもしれません。
   PC用がそうならゲーム機用CPUももしかするともっと広い範囲も演算可能なのかもしれません。


さて、話を戻します。
では、0と1の2値で数を数えるとどうなるかというと・・・
   1,10,11,100,101,110,111,1000,1001,1010,1011・・・
・・・人間が読むには激しく向いてませんね。
この表現が「2進法」です。
コンピュータ的に見れば、ただ単にビットの状態(メモリ上のスイッチの状態)を表示しただけで、すっごく楽なわけですが・・・

ここまで読んでプログラムを書くには2進法を使いこなせなければいけないのかと
思う人もいるかと思いますが、プログラムを書く上で2進法を使う必要があることは非常に稀です。
今思いつく限り、「ビットフラグ」ぐらいでしか2進法を使うことはありません。

プログラムでも別に普段使っている通り1,2,3,4,5・・・のスタイルを使えます。
プログラムソースは人間が読むものですから、人間が使いやすいようにできてます。
その辺は安心しても大丈夫です。

言語によっては他に2進法や8進法、16進法を使えます。
2進法は上述した通りですが、8進法や16進法とはどんなものでしょうか?

8進法は3ビットを集めて使いますが、私はいまだかつて一度も使ったことないです。
数え方は1,2,3,4,5,6,7,10,11,12,13・・・です。

16進法は4ビットを集めて使います。結構出番多いです。
数え方は1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11・・・です。

もう分かった方もいるかと思いますが、X進法のXの部分、それは1桁が表現できる数値の数です。
2進法は0と1の2個、
8進法は0,1,2,3,4,5,6,7の8個、
16進法は0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fの16個があります。

普段使っている数え方ももちろん例外ではなく、X進法としての名前を持っています。
1桁で表現できるのは0,1,2,3,4,5,6,7,8,9の10個ですから、10進法です。

Windows付属の電卓は上記の4種類の表記法で値を表現できます。
関数電卓モードにすると出現します。
ただし10進以外のモードでは小数点は使えず、符号もなくなります。
その横にあるQwordとかDwordとか(QwordはXPのみで確認)はビット数を意味します。
Qword=64ビット、Dword=32ビット、Word=16ビット、Byte=8ビットです。
計算結果がこれを越えると利用可能なビット数より上の桁は消えます。

この謎めいた名前の意味は・・・Windowsプログラムに進めばわかりますよ(笑)

最後に各表記の対応表でも載せときます。
これより大きな範囲はWindows付属の電卓(関数電卓モード)で見てみましょう。

10進法2進法8進法16進法
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F
16100002010
17100012111
18100102212
19100112313
20101002414
21101012515
22101102616
23101112717
24110003018
25110013119
2611010321A
2711011331B
2811100341C
2911101351D
3011110361E
3111111371F
321000004020


23911101111357EF
24011110000360F0
24111110001361F1
24211110010362F2
24311110011363F3
24411110100364F4
24511110101365F5
24611110110366F6
24711110111367F7
24811111000370F8
24911111001371F9
25011111010372FA
25111111011373FB
25211111100374FC
25311111101375FD
25411111110376FE
25511111111377FF
256100000000400100
ちょっと力入れて表作っちゃいました(笑)

そろそろ書くものがなくなってきたので
いよいよ次回から各言語編に分岐しようと思います。
また何か書くものを見つけたら追記します。


[前へ]   [目次へ]   

プログラミング講座 総合目次
プログラミング講座 総合目次(サイトメニュー付き)

フレームが無い場合はここ
最終更新 2008/10/17