整数定数
整数型の値を直接式で使用できます。
目次 |
[編集] 構文
整数定数は、次の形式の非左辺値式です。
| 10進数定数 整数サフィックス (オプション) | (1) | ||||||||
| 8進数定数 整数サフィックス (オプション) | (2) | ||||||||
| 16進数定数 整数サフィックス (オプション) | (3) | ||||||||
| 2進数定数 整数サフィックス (オプション) | (4) | (C23以降) | |||||||
ここで、
- 10進数定数 は、0以外の10進数字(
1、2、3、4、5、6、7、8、9)に続いて、0個以上の10進数字(0、1、2、3、4、5、6、7、8、9)が続いたものです。 - 8進数定数 は、数字のゼロ(
0)に続いて、0個以上の8進数字(0、1、2、3、4、5、6、7)が続いたものです。 - 16進数定数 は、文字シーケンス
0xまたは文字シーケンス0Xに続いて、1つ以上の16進数字(0、1、2、3、4、5、6、7、8、9、a、A、b、B、c、C、d、D、e、E、f、F)が続いたものです。 - 2進数定数 は、文字シーケンス
0bまたは文字シーケンス0Bに続いて、1つ以上の2進数字(0、1)が続いたものです。 - 整数サフィックス は、指定されている場合、次のいずれかを含みます(ただし、unsignedプレフィックスは他のもののいずれかと組み合わせることができます。2つのサフィックスが使用される場合、それらは任意の順序で出現できます)。
- unsignedサフィックス (文字
uまたは文字U) - longサフィックス (文字
lまたは文字L)または long-longサフィックス (文字シーケンスllまたは文字シーケンスLL)(C99以降) - ビット精度整数サフィックス (文字シーケンス
wbまたは文字シーケンスWB)(C23以降)
- unsignedサフィックス (文字
|
数字の間にオプションの単一引用符( |
(C23以降) |
[編集] 説明
aからfは10から15の10進値を表します)。次の変数はすべて同じ値で初期化されます。
int d = 42; int o = 052; int x = 0x2a; int X = 0X2A; int b = 0b101010; // C23
次の変数もすべて同じ値で初期化されます。
unsigned long long l1 = 18446744073709550592ull; // C99 unsigned long long l2 = 18'446'744'073'709'550'592llu; // C23 unsigned long long l3 = 1844'6744'0737'0955'0592uLL; // C23 unsigned long long l4 = 184467'440737'0'95505'92LLU; // C23
[編集] 整数定数の型
整数定数の型は、使用された数値基数と整数サフィックスによって決まる型のリストの中から、値が適合する最初の型です。
| suffix | 10進基数 | その他の基数 |
|---|---|---|
| サフィックスなし | int
long int |
int
unsigned int |
u または U |
unsigned int
unsigned long int |
unsigned int
unsigned long int |
l または L |
long int
unsigned long int(C99まで) |
long int
unsigned long int |
l/L と u/U の両方 |
unsigned long int
unsigned long long int(C99以降) |
unsigned long int
unsigned long long int(C99以降) |
ll または LL |
long long int(C99以降) | long long int(C99以降) unsigned long long int(C99以降) |
ll/LL と u/U の両方 |
unsigned long long int(C99以降) | unsigned long long int(C99以降) |
wb または WB |
_BitInt(N)、ここで幅Nは、値と符号ビットを格納できる1より大きい最小のNです(C23以降) | _BitInt(N)、ここで幅Nは、値と符号ビットを格納できる1より大きい最小のNです(C23以降) |
wb/WB と u/U の両方 |
unsigned _BitInt(N)、ここで幅Nは、値を格納できる0より大きい最小のNです(C23以降) | unsigned _BitInt(N)、ここで幅Nは、値を格納できる0より大きい最小のNです(C23以降) |
整数定数の値が、サフィックス/基数の組み合わせによって許可されるどの型にも収まらないほど大きい場合、サフィックスwb、WB、uwb、またはUWBを持ちません(C23以降)、かつコンパイラが拡張整数型(__int128など)をサポートしている場合、定数は拡張整数型を持つことができます。それ以外の場合、プログラムは不正な形式となります。
[編集] 注記
整数定数内の文字は、大文字と小文字を区別しません。0xDeAdBaBeUと0XdeadBABEuは同じ数値を表します(1つの例外はlong-longサフィックスで、llまたはLLのいずれかであり、lLやLlではありません)(C99以降)。
負の整数定数はありません。 -1のような式は、定数によって表される値に単項マイナス演算子を適用します。
|
#ifまたは#elifの制御式で使用される場合、すべての符号付き整数定数は、intmax_t型を持つかのように、すべての符号なし整数定数はuintmax_t型を持つかのように扱われます。 |
(C99以降) |
整数定数は、整数定数式で使用できます。
最大マッチャーにより、eとEで終わる16進整数定数は、+または-演算子の後に続く場合、ソースで空白または括弧で演算子から区切る必要があります。
int x = 0xE+2; // error int y = 0xa+2; // OK int z = 0xE +2; // OK int q = (0xE)+2; // OK
それ以外の場合、単一の無効なプリプロセッサ番号トークンが形成され、さらなる解析の失敗を引き起こします。
[編集] 例
#include <inttypes.h> #include <stdio.h> int main(void) { printf("123 = %d\n", 123); printf("0123 = %d\n", 0123); printf("0x123 = %d\n", 0x123); printf("12345678901234567890ull = %llu\n", 12345678901234567890ull); // the type is a 64-bit type (unsigned long long or possibly unsigned long) // even without a long suffix printf("12345678901234567890u = %"PRIu64"\n", 12345678901234567890u ); // printf("%lld\n", -9223372036854775808); // Error: // the value 9223372036854775808 cannot fit in signed long long, which // is the biggest type allowed for unsuffixed decimal integer constant printf("%llu\n", -9223372036854775808ull ); // unary minus applied to unsigned value subtracts it from 2^64, // this gives unsigned 9223372036854775808 printf("%lld\n", -9223372036854775807ll - 1); // correct way to form signed value -9223372036854775808 }
出力
123 = 123 0123 = 83 0x123 = 291 12345678901234567890ull = 12345678901234567890 12345678901234567890u = 12345678901234567890 9223372036854775808 -9223372036854775808
[編集] 参照
- C23標準 (ISO/IEC 9899:2024)
- 6.4.4.1 Integer constants (p: 57-60)
- C17標準 (ISO/IEC 9899:2018)
- 6.4.4.1 Integer constants (p: 45-46)
- C11標準 (ISO/IEC 9899:2011)
- 6.4.4.1 Integer constants (p: 62-64)
- C99標準 (ISO/IEC 9899:1999)
- 6.4.4.1 Integer constants (p: 54-56)
- C89/C90標準 (ISO/IEC 9899:1990)
- 3.1.3.2 Integer constants
[編集] 関連項目
| C++ドキュメント (整数リテラル)
|