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