第二回-05 C/C++ で正負の整数を確認

前ページまでで、コンピュータの内部では数値は 2 進数で表現されていること、
そして、ある 2 進数の 0 と 1 のパターンが、「0を含む正の整数と解釈した場合」と「負の整数と解釈した場合」とで異なる値になることがあることを学んだ。
それを C/C++ で確認してみよう。

符号なし整数と符号つき整数

さて、前ページでは 2進数を以下の二つにわけて考えた プログラミングの世界では、それぞれに対して以下の名前が付いている。 さて、今日の演習で用いる変数は整数を表す int 型である。
通常の PC では、 int 型の整数は 32 ビットの符号つき整数である。

32 ビットというのは、前ページまでに取り扱ってきた 4 ビットや 8 ビットに比べ、かなり桁が多い。
それでは少し演習が難しくなるので、ビット数を減らしたいときに使える型修飾子を紹介する。


型修飾子

int 型や double 型などの変数を宣言する際、型の前に型修飾子と呼ばれる以下のものをつけることができる。 まず、signed と unsigned は、変数が符号つき (signed、サインド) か符号なし (unsigned、アンサインド) かを指定するためのものである。
使用例は以下の通り。

signed int i;     // 符号つき整数型の変数 i の宣言
unsigned int j;   // 符号なし整数型の変数 j の宣言

通常のPC の場合、signed は省略できる。 すなわち、以下のようにも書ける。

int i;     // signed int i; と同じ

これまで int 型の整数を何度も宣言してきたが、
それは実は符号つき (正負あり) 整数である singed int の変数を宣言していた、ということである。

また、型修飾子 short や long を int などの前につけると、変数のビット数を指定することができる。
int 型の場合、short をつけると 16ビットになり、long をつけると 32 ビットとなる。

本日の演習の場合、ビット数を小さくしたいので、short をつけて 16 ビットの 2 進数を取り扱う。

short int i;            // 16ビットの符号つき整数型の変数 i の宣言
unsigned short int j;   // 16ビットの符号なし整数型の変数 j の宣言

さて、16 ビットの 2 進数により表現される 10 進数の範囲はわかるだろうか?
前ページに以下の内容が書かれていたことを思い出そう。
これにもとづけば、16ビットの 2 進数で表現できるのは、以下の範囲の 10 進数である。

sizeof 演算子

さて、型修飾子によってビット数を指定できることがわかった。
型のビット数を確かめるには、sizeof 演算子を用いると良い。

sizeof(short int)
sizeof(unsigned short int)

結果はバイト単位で得られる。1 バイト = 8 ビットであるので、結果をビットで表示したければ、結果に8 をかければ良い。

std::cout << "short int 型のビット数は" << 8*sizeof(short int) << "ビットです\n";
std::cout << "unsigned short int 型のビット数は" << 8*sizeof(unsigned short int) << "ビットです\n";



演習を実行するための雛型

さて、以上の予備知識のもと、本日の演習を行うために必要なプログラムは以下のようになる。
Visual Studio で実行してみよう。その方法が分からない学生は「第一回-03 初めての C/C++ プログラミング(コンソールアプリケーション編)」を復習すること。

	short int i;            // 16ビットの符号つき整数型の変数 i の宣言
	unsigned short int j;   // 16ビットの符号なし整数型の変数 j の宣言

	// ビット数を表示
	std::cout << "short int 型のビット数は" << 8*sizeof(short int) << "ビットです\n";
	std::cout << "unsigned short int 型のビット数は" << 8*sizeof(unsigned short int) << "ビットです\n";	

	// 変数に値を代入
	i = -120;
	j = 65528;

	// 変数の中身を表示
	std::cout << "符号つき整数 i の値は" << i << "です\n";
	std::cout << "符号なし整数 j の値は" << j << "です\n";

実行すると、コンソールに以下の内容が表示されるはずである。確認したら、課題に進もう。

short int 型のビット数は16ビットです
unsigned short int 型のビット数は16ビットです
符号つき整数 i の値は-120です
符号なし整数 j の値は65528です




←第二回-04 コンピュータ上の数値の表現 (2) 負の数を含む整数の2進数による表現〜2の補数表現第二回課題→

非情報系学生のための C/C++ 入門に戻る