MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
 English 

しんで覚えるC言語
しんで覚えるC言語

数値の種類

さまざまな数値
今まで、一口に数値という表現を使ってきましたが、
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の何乗などの値を掛け算して実数を表現する。
巨大な数から極小の数まで扱え便利だが、計算は遅い。


実数の計算
前章で行った計算では、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

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


本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く