C初級:数値の表し方(10進数、8進数、16進数)

C言語初級カテゴリのロゴ画像C言語初級
スポンサーリンク

サンプルプログラム numerical1.c

/* numericals1.c 数値の表し方 */
#include <stdio.h>
int main(void)
{
	int n;
	
	n = 10;		/* 10進表記 */
	printf("n = %d\n", n);
	
	n = 012;	/* 8進表記 */
	printf("n = %d\n", n);
	
	n = 0xA;	/* 16進表記 */
	printf("n = %d\n", n);

	return 0;
}

実行結果

n = 10
n = 10
n = 10

C言語での数値の表し方は、3通りあります。
10進数、8進数、16進数の3つです。残念ながら2進数を直接扱うことはできません。(ただし内部的には2進数を扱うことはできます。これはビット演算の項でふれたいと思います)

整数型変数nを使って確認したのが上記プログラムです。
nに3種類の数値を代入しているように見えますが、実際は10という数値を代入しているだけです。

n = 10;
n = 012;
n = 0xA;

は全て同じ意味です。
まとめておきます。

表現方法
10進数そのままあらわすa = 100;
8進数数値の先頭に0を付けるa = 010; 8進数の10(10進数の8)という意味
16進数数値の先頭に0x(ゼロ・エックス)を付けるa = 0xA; 16進数のA(10進数の10)という意味
上記は a = 0xa; としても同じ

ちなみに四則演算にもこの表記は対応しています。

16進数同士の足し算

n = 0xA + 0xB;

や8進数同士の掛け算

n = 010 * 03;

も可能ということです。

もちろん10進数、8進数、16進数が混在した表記もできます。

n = 10 + 012 + 0xA;

まあ、こんなことはしないと思いますが。

上記サンプルでは、変数の値を代入する時に表記を変えました。
それとは別にprintf関数で表示するときだけ数値表記を変更する方法があります。
書式指定子を使う方法です。

/* numericals2.c 数値の表し方2(書式指定子による) */
#include <stdio.h>
int main(void)
{
	int n = 10;
	
	/* 10進表示 */
	printf("n = %d\n", n);

	/* 8進表記 */
	printf("n = %o\n", n);
	
	/* 16進表記 */
	printf("n = %x n = %X\n", n, n);

	return 0;
}

実行結果

n = 10
n = 12
n = a n = A

解説
変数nに10を1度だけ代入して、10進数、8進数、16進数で表示しています。
8進数で表示したいなら%o、16進数で表示したいなら%xを使うだけです。

進数書式指定子
10進数%d
8進数%o
16進数%x 又は %X

16進数は%x(xは小文字)と%X(Xは大文字)の2種類ありますが、表示を大文字にするか小文字にするかの違いです。
好きな方を選んでください。

コメント