表紙 <戻 進>

   数値の種類   

  1. 第1項:様々な数値
  2. 第2項:実数の計算

[1]様々な数値

今まで、一口に数値という表現を使ってきましたが、
C言語で扱われる数値は、2種類存在しています。
それは、整数と実数です。

整数とは、自然数に、0と負の数を加えた数のことです。
例えば、1、-1、0、5、8、7・・・、などの数のことで、
要するに、我々が普段使用している、普通の数のことを整数と呼びます。

実数とは、整数に、小数値を加えた数のことです。
例えば、1.0、5.2、-9.687、3.14159、などの数のことで、
要するに、小数を含む数のことを実数と呼びます。

また、整数は、3種類の書き方を使うことが出来るようになっています。
それは、10進数、8進数、16進数の3種類に分かれています。
書式 進数
数字 10進数
0数字 8進数
0x数字 16進数
先頭に0をつけない数は、10進数として扱われます。
例えば、100、25、68、71、19023 などは10進数です。

先頭に0をつけた数は、8進数として扱われます。
例えば、0152、027、0756、030303 などは8進数です。
普通の感覚では、0152 も 152 も同じ数だと思ってしまうのですが、
C言語では、0152 は8進数(10進数では106)と解釈されるので注意が必要です。

また、同様の理由で、089、と言った数は、C言語ではエラーとなってしまいます。
何故なら、8進数では、8 や 9 と言った数字は使用しないからです。

現実には、8進数を使うことはまれですので、先頭に 0 をつけないのが良いと思います。
ちなみに、 0 とした場合は、8進数でも 0 なので、別に問題はありません。

意外に良く使われるのが16進数で、これは先頭に 0x をつけて表します。
例えば、0xFF、0xA7、0x912C、0xABCD などは16進数です。
C言語では、文字コードなど、特定の意味の数値の表現に、
慣習的に16進数が使われることがある他、
ビット演算などの処理では16進数の表記が頻繁に使われます。
もちろん、初心者の人は当分使用することはないと思いますが。

なお、実数の表記には、10進数しか使うことが出来ません。
コンピュータで実数を扱う方法は色々あるのですが、
C言語の場合浮動小数点方式と呼ばれる方法を使用しています。
このため、C言語の世界では、実数のことを浮動小数と呼ぶことが良くあります。


[  浮動小数点方式  ]
実数値を、数値の並び(仮数部)と、小数点の位置(指数部)で表す方法。
仮数部に、10の何乗などの値を掛け算して実数を表現する。
巨大な数から極小の数まで扱え便利だが、計算は遅い。

[2]実数の計算


前章で行った計算では、10/3(10÷3) の答えが、3 と出されてしまいました。
これを、実数を使用して、なるべく正確に計算してみたいと思います。
ただし、分数じゃないので、完璧に正確には計算出来ません。ご容赦願います。


[  正確な計算  ]
この様に、コンピュータで正確な計算を行うのは困難です。
実数を使用すると、必ず割りきれない数が発生する他に、
2進数で計算しているために起きる誤差もあります。
※実は、2進数では 0.1 などの数値を正確に表せない。
通常であれば四捨五入してしまえば大きな問題になりませんが、
正確さが必要な銀行のコンピュータなどは、
10進数の分数として計算する仕組みを持つそうです。
実数で計算したい場合、数値を実数にすれば、自動的に実数の計算になります。
計算自体はそれで問題ないのですが、もう1つの注意点として、
表示する時に使用する出力変換指定子も変わってきます。

今までは、数値を表示する時には、%d指定子を使用してきましたが、
これは、整数値を数字に変換するための指定子です。
実数値を数字に変換する場合は、%f指定子を使用しなければ行えません。

ここまでわかれば、後は簡単なことです。
次のプログラムは、前章のプログラムを、実数による計算に直した例です。


#include <stdio.h>

int main(void)
{
	printf("%f\n",10.0 + 3.0);
	printf("%f\n",10.0 - 3.0);
	printf("%f\n",10.0 * 3.0);
	printf("%f\n",10.0 / 3.0);
	return 0;
}
このプログラムの実行結果は、次の通りになります。

13.000000
7.000000
30.000000
3.333333
いかにも実数で計算したと言う感じの答えになりましたね。
なお、今回は %(剰余)演算子を使用していませんが、これは当然のことです。
実数では余りは計算出来ませんから、%演算子は使えないのです。

目次に戻る



<−前に戻る  先頭に戻る  次へ進む−>