←前へ :  INDEX :  次ページへ→


  では次に整数のお話をします。どんなプログラムでも整数は必ず出てくるので、整数は小数よりも大事です。ただし小数ほど複雑な構造になっているわけではありません。まぁ、当たり前ですが・・・

符号なし整数
  もっとも単純なのが符号なし整数です。例えば8bitならば28の数が記憶できます。すなわち、0〜255(28-1です。16bitならば、 0〜65535(216-1)ですし、32bitならば0から232-1までです。 0は00、FF(255)、などそのまんま表現するだけです。

  8bitの場合、255+10など、表現できる値を超えてしまった場合、アセンブラ、 C言語など多くのプログラム言語ではエラーにはなりません。255+10=265で、 8bitでは表現できないので、8bitに丸め込まれてしまいます。すなわち、 255を2進数で表すと(11111111)2で、10は(00001010)2でその結果の265は(100001001)2で、9桁になりますので、9桁以上を切り捨てて、(00001001)=9になります。16bitの場合は、演算の結果が2進数で17桁以上になった場合は17桁以上を切り捨てて、16桁に丸め込まれます。32bitも同様で、32bitに丸め込まれます。このため、どんな言語を使っていても、勝手に丸め込まれないようにプログラマーが注意しなくてはなりません。

  アセンブラでは、足し算を行った際に、丸め込まれたかを調べることができます。これについては後で述べます。C言語ではわかりませんので、必要ならば足し算を行う前に越えるかどうかをチェックしなければなりません。

  引き算の場合も同様なことが起こります。0-1はマイナスになります。この場合、1つ上の位から桁を借りてきてマイナスします。つまり、8bit の場合、0は100hと解釈され、100h-1=FFhになります。50h-A0hはやはりマイナスになるので、1桁借りてきて、150h-A0h=B0hになります。これについても 後述します。

符号付き整数
  上位1bitを符号として扱います。上位1bitが0の時は正、1の時は負となります。したがって、8bitの場合、正では0〜127、負は-128〜-1を表現できます。同様に 16bitでは-32768〜+32767までです。正の場合、下位7bitは上述の符号なし整数と同じです。負の数については「2の補数」という概念で表現されます。

  例えば-5を考えると、+5を2進数で表現すると(00000101)2です。これの「1の補数」すなわちNOTをとります。(0と1を逆にします。)すると、 (11111010)2です。これに1を加えます。すると(11111011)2 になります。これが「2の補数」の計算の仕方で、(11111011)2=-5となります。ちなみにこれを符号なし整数で表すとFBhとなります。

  +5が(00000101)2なので、上位1bitの符号を1にして、(10000101)2 が-5になるわけではありません。

  2の補数で負の数を表現すると何が便利なのでしょうか? まだ演算装置(いわゆるCPU)が初期の初期のころ、足し算命令はあったけれど、引き算の命令がないCPUもありました。そこで足し算だけで引き算をする必要がありました。その結果負の数を2の補数として表すことが考え出されたのです。

  例えば、「15-3」を考えます。これを15と-3を足すと考えます。 15=(00001111)2=0Fhで、-3=(11111101)2=FDhです。これを足すと、上述したように9桁以上は無視されて0Ch=12となります。引き算は行わずに引き算をすることができました。

  ところが問題もあります。8bitの場合は-128〜+127までですから、 16進数で表現すると-80h〜+7Fhです。+7Fh=(01111111)2に 1を加えると、(10000000)2となり、上位1bitが1ですので、これは-80hになります。正の整数に1を足したら負の数になってしまいました。これをオーバーフローといいます。これについては後述します。

  すなわち、コンピュータが数値を覚えるというのは、メモリーに記憶するだけのことですから、コンピュータにとっては今覚えた値が、正だろうが負だろうが、小数だろうがなんだろうが関係ないわけです。プログラマーがどう判断し、コンピュータにどう扱わせるかというだけの話です。高級言語ではある程度の判断をコンパイラがやってくれます。C言語では、この変数に入れた値は小数なのか、符号なし整数なのか、符号付き整数なのかなどを一番最初に宣言しなければなりません。アセンブラではすべてをプログラマが管理しなければなりません。足し算を行う際も、符号なし整数なのか、符号付き整数なのかによって、やり方も異なります。

  本ホームページのアセンブラ入門では、符号なし整数しか扱いませんが、この「アセンブラ入門」に書かれていることを一通り勉強すれば、符号付き整数の計算の仕方くらいは余裕で考えられると思います。がんばってください。


←前へ :  INDEX :  次ページへ→