←練習問題へ :  INDEX :  次へ→


算術演算


3-1.符号なし演算と符号付き演算

  コンピュータが理解できる数字は2進数であり、これは人間には理解しにくい。そこで人間が理解できるように変換する必要がある。この変換の方式は用途、精度、変換のしやすさなどによりいくつかに分けられる。高級言語ではそのうち汎用性の高い方法を採用しているが、アセンブリ言語では計算の仕方を変えるだけで、すべての方法を用いることができる。

  高級言語では扱える種類は限られるが、手続きをすれば簡単に且つ、ミスの無いように扱うことができる。これに反しアセンブリ言語では、すべての種類を扱える反面、「この数字はこの方法で扱う」というのはプログラマーが管理しなくてはならず、ミスしやすい。

  このページでは数の表現方法を紹介し、アセンブリ言語で頻繁に使われる「符号付き整数」と「符号なし整数」について解説する。

  数の表現は目的などによっていくつかの方法があることは上で述べた。その種類は下記の通りである。


2進化10進法(BCD)
10進数の各桁をそれぞれ4桁(4bit)の2進数で表したもの。
例)10進数の193をBCDで表すと
1 9 3
0001 1001 0011
したがって(193)10=(000110010011)2となる。
2進数の並びのうち、1010〜1111は使わないので、効率は悪い。

10進ゾーン形式
BCDの1種で、アンパックBCDとも呼ぶ。10進数の1桁を8bit(1バイト)の2進数で表す。 10進数の1桁は2進数の4桁(4bit)で表すことができるので、残りの4桁(4bit)を何かの数字で埋めなくてはならない。通常10進数の1桁を表す4bitは8bitのうちの下位に置き、上位4bitは1111(EBCDIC規格)または0011(ASCII、JIS規格)を埋める。また最後の1桁の上位4bitは符号を置く。1100ならば正、1101ならば負を表す。この符号部分と1111または0011(上位4bit)をゾーン部、数字を表す下位4bitを数値部と呼ぶ。

例)10進数の-193を10進ゾーン形式で表すと

1 9 3
JIS 0011 0001 0011 1001 1101 0011
EBCDIC 1111 0001 1111 1001 1101 0011
したがって(-193)10=(00110001 00111001 11010011)2となる。(JIS規格)

10進パック形式
パック10進数とも言う。10進ゾーン形式ではゾーン部には大して意味のないコードが入るため、効率が悪い。そこで、10進数の1桁を4bitで表し、最後に符号を付けることで、語長を短くしたものがパック10進数である。

例)10進数の+193を10進ゾーン形式で表すと

1 9 3 +
0001 1001 0011 1100
したがって(+193)10=(0001100100111100)2となる。

固定小数点形式
整数部と小数部の2つに分けて表す方法で、それぞれは符号付き整数と同じである。あまり見かけない。

浮動小数点形式
極端に大きな数や、極端に小さな数を扱うのに適している。例えば極端に小さい値は 1.2×10-10のように表すことがある。このように指数を用いて表したものが浮動小数点形式であるが、場合によってはわずかな誤差や桁落ち(絶対値がほぼ等しい同符号の間での減算もしくは異符号での加算)、情報落ち(非常に大きな数値と小さな数値との加減算)などが起こる場合もある。
32bitの浮動小数点形式では最上位1bitは符号(0:正、1:負)、次の7bitで指数部( 2の指数+64)、下位24bitは仮数部を表す。

例)10進数の200を浮動小数点形式で表すと

(200)10=(11001000)2=0.11001×28 =0.11001×162
ここで正数であるから符号は「0」、指数は2であるから+64して(66)10=(100010)2 が指数部に、0.11001の「11001」が仮数部に入る。したがって、
(200)10=(0 1000010 110010000000000000000000)2となる。
例)10進数の12.5を浮動小数点形式で表すと
(12.5)10=(1100.1)2=0.11001×24 =0.11001×161
ここで正数であるから符号は「0」、指数は1であるから+64して(65)10=(100001)2 が指数部に、0.11001の「11001」が仮数部に入る。したがって、
(12.5)10=(0 1000001 110010000000000000000000)2となる。

  ここまで真剣に読んでくれた方、ごめんなさい。当ホームページではこれらは使いません。っていうか、これらの数字を扱う場合はアセンブラよりも高級言語でやった方が数十倍楽です。 次のページで解説する「符号なし整数」「符号付き整数」は大事ですので、ちょっと気分転換でもしてください。

←練習問題へ :  INDEX :  次へ→