AppD 同様、校正前なのでこちらに送ります。見てやってくださいませ。 @node AppF 付録 F: 16進の値 F.1 はじめに 16進 (hex) とは基本的には、通常とは異なる単なる数値表現法である。これは コンピュータにとっては、より便利な表現法である(動作原理による)。ユーザーも 同数の文字で、より広範囲の数値を記すことができる。 OctaMED では16進値がプレイヤーコマンド、MIDI メッセージエディタ、合成 エディタで使われており、それゆえ非常に重要なものとなっている。 通常の十進法では、一文字が10の異なった値を表現する: 0, 1, 2, 3, 4, 5, 6, 7, 8 そして 9 である。 ところが16進法では、一文字で 16 種の値を表現できる。: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E それに F。十進法での 10 - 15 は、文字 A から F に よって表される: 十進 10 = 16進 A; 11 = B; 12 = C; 13 = D; 14 = E; 15 = F 二文字では、十進法は 10 x 10 = 100 の異なった数値を表わすことができる。それ が16進法では 16 x 16 = 256 の値を表すことができる: 十進法の優に二倍以上で ある。(16進の最小値は 00 = ゼロ、最大値は FF = 255 となる)。 F.2 二つの記数法の変換 というわけで、はじめは奇妙に思えるかもしれないが、それにはそれの良さがある ものだ。2文字の16進数 (例えば 8A) では、最初の文字は 16 の倍数を表す。 だから2文字の16進数を十進数に変換するには: 十進数 = (16進第一文字) x 16 + (16進第二文字) そして十進を16進に変換するには、十進数を 16 で割ればよい。商が16進第一 文字、余りが16進第二文字となる。 例 1) 16進 8A -> 十進 : 16進文字 1 = 8, 16進文字 2 = A (10). 十進数 = (8 x 16) + 10 = 138. 2) 十進 200 -> 16進: 200 / 16 = 12 余り 8. 16進文字 1 = C (12), 16進文字 2 = 8. ゆえに16進数 = C8. 16進数は先頭に $ 記号を付けることにより、十進数と区別することもある。 例: $C8、$FF。 F.3 符号付き16進数 Signed hexadecimal さらに厄介な問題が! OctaMED Soundstudio の出現に伴い、プレイヤーコマンドの 多くが「符号付き」16進数レベルのコマンドを持つようになったのだ。 数値の符号とは、その数値が正か負かを表現するもの: つまり + と - である。 ところが16進数では - 符号が無い。だから、負の数は正の数で表される (いずれ 明らかに!) 符号付き hex においても、数値 $00 - $7F は通常通り正である: これは十進数の 0 - 127 である。しかしながら、 $80 - $FF は十進の -1 から -128 を表す。 十進 -1 = 16進 $FF; -2 = $FE; -3 = $FD etc. 十進 -16 = 16進 $F0; -17 = $EF; -18 = $EE etc. 十進 -126 = 16進 $82; -127 = $81; -128 = $80 というわけで、負の十進数を符号付き16進数に変換するには、まずその数に 256 を 加え、それから上のような16進変換を行うということになる。 例 十進 -67 -> 符号付き16進: -67 + 256 = 189。 189 / 16 = 11 余り 13。 16進文字 1 = 11 (B)、16進文字 2 = 13 (D) ゆえに符号付き16進数 = $BD。 符号付き16進数が通常の16進数と厳密に同じモノに見える、という事実を理解する ことが重要である。$FC が十進の 252 なのか -4 なのか、見ただけで区別すること は不可能なのだ; 数値が通常のモノか、あるいは符号付きのモノなのかを区別させる のは状況である。例えば、プレイヤーコマンド 15 (ファインチューンの設定) に おいては、$FC は -4 と解釈される。プレイヤーコマンド 01 (ピッチをゆっくり 上げる) においては 252 になる。 16進数にはコンピュータ分野の多くで出くわすはずだ。付き合ったことが無いなら 慣れておくべし! @{"Contents " link "Main" 0} @endnode