MSXを知ることが早道です…

[
やってみましょうBASIC]-[グラフィック]-[サウンドとミュージック]-[マシン語]-[ダウンロード]

16進数


一般に使う24進数

パソコンで使う16進数


一般に使う進数

 私達は知らず知らずのうちに誰でも進数を使っています。
それは時間です。時間というのは進数で成り立っています。
48時間52分47秒、1995年3月21日
 これは時間は24進数、分と秒は60進数、月は12進数、
日は不規則な28〜31進数という進数を使っていることになります。

パソコンで使う16進数

パソコンでは10進数ではなく、16進数で処理されています。
なぜ、10進ではないのか?それは16進数は2×2×2×2進数ということになるわけです。
2進数というのは0(ゼロ)、1(イチ)で2通りです。パソコンではゼロも含まれます。
ですからOFH(15)、10H(16)となります。
ではその表し方を勉強していきましょう。

10、16、2進数の対応表

hex-10.jpg


少しおもしろい表になりましたが、このような表になります。
10進数の場合は9が1001となり8進数の場合は7が111と
キリがよいですが3ビット、それでもちょっとキリがよくありません。
そこで次の1111は15になるわけです。

4つの電球に例えれば1011は
点ける消す点ける点けるとなります。
これをいろいろなパターンにすることで電光掲示板などの文字イメージができます。
バイナリの00001110を16進数にすると0EHになります。
0EH(ゼロ、イー、エイチ)のエイチをヘキサと呼びます。
8ドットスプライトのパターンはこのようにしてAD、CDなど2バイトの組み合わせで
行っていきます。

さて、2進数は最初は0は0、1は1、2は10(イチゼロ)、3は11(イチイチ)
4は100(イチゼロゼロ)、5は101(イチゼロイチ)
ちょっとおもしろい事をやりましょう。

? &B0011
? &B0110
? &B1100

このようにビットをずらすことで3+3、4+4と加算されていきます。
おもしろいですね。8の2分の1は4と逆にもできます。
これはCPU命令に使われている一つです。

8進数は7で10になります。10進数は9ですね。
さて、16進数は10以上はA〜Fまでのアルファベットになります。
2進数はCを1100と書きます。
表では■と空白で表しています。四角が1で空白が0になります。
2進数は1で繰り上がり10になります。これが3になります。
BASICの表し方は&B11000101、&O305、197、&HC5となります。

参照:BIN OCT HEX


なぜ、16進数と思ってしまいますが、ゼロと1の並び方で都合がよいのです。
■■■■で1111(イチイチイチイチ)を表すと10進では15ですが、16進ではF(エフ)で済みます。
■□□□□で10000(イチゼロゼロゼロゼロ)は16進では10になります。
また、上の表は覚える必要はありません。スプライトを作る時に見る表です。
覚えて欲しいのは16と32と64と128と256と512と1024という単位です。
特にこの1024というのは単位が上がる数でK(キロ)がM(メガ)がG(ギガ)がT(テラ)となります。
 

16進データを参照する方法

10 FOR I=0 TO 4

20 READ R$

30 R=VAL("&H"+R$)

40 POKE &HD000+I,R

50 NEXT

60 DATA 31,DE,CC,3E,C9

これはRAMに&HD000から&HD0004まで書きこむプログラムです。

スプライト定義をする時もDATA 3C,1E,1E,〜というように16進数で見た目よくできるようになります。

BCD(二進化十進表現)

■10進数を考える

ビット計算では0.1×100=9.99999となる。
このようにビットでは表現できない数値が多くある。
これでは正確な数値が出せないということで
計算には2進数を十進数として使っている。

10進数は0123456789ですね、これは記号と考えましょう。
10というのは諸々説がありますが両手合わせて10になりますね。
これを20個という表現を両手を2回手をあげたとしても、よくわかりません。
そこで位(くらい)というものが生まれました。
例えば3425.326の場合、3425326を仮数と呼び、小数点などを指数と呼びます。
34.25326も342.5326も小数点の位置が違うだけで仮数は変わりません。
大きな数字から小さな数字を広範囲に効率よく格納するには
指数と正負の負号と仮数部があれば少ないメモリ領域で計算出来ることになります。

10進数の場合は9で繰り上がって10になる。
ちょっと難しいかもしれないが、倍精度型実数は8バイトで表現されている。
1バイト目は8ビットのうち右から7が±の符号で、0〜6までが指数になる。
指数は7ビットのバイナリ表現で64までできるから、-63乗から+63乗までできることになる。
2バイト目から7バイト目まで奇数が上位、偶数が下位になる。
だから
12345678901234が仮数ならば
12345678901234000000000000000000000000000000000000000000000000
という実数の具合にできるけれど表示では
1.2345678901234E+62
となる。

16進数を超える進数を作ることができる?

PCの1バイトの入力コードがあります。これをキャラクタコードと呼びます。
例えばASCII(アスキー)コードは0〜255まであり、Aで64という数を入力したようにもできます。
キーボードに使われるアスキーコードはPC入力用に拡張されたコードです。
MSXの場合はメモリエディタ(マシン語モニタ)に文字だけの表示がこのコードにあたります。
コードの書き換えは 厳密に言えば
メモリに255と数値を書き込むときは16進数でFFかアスキーコードの文字で■かを書くことになります。

参考文献:
コンピュータはなぜ動くのか

戻る

 


(c)1991 UME,(c)1993 UMEnoteProjects ,(c)1999 Hinoume ProgramTeam.