サンプルプログラム 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種類ありますが、表示を大文字にするか小文字にするかの違いです。
好きな方を選んでください。
コメント