Integer constant
整数型の値を式内で直接使用できるようにします。
目次 |
構文
整数定数は 非左辺値 の形式を持つ式です
| decimal-constant integer-suffix (オプション) | (1) | ||||||||
| octal-constant integer-suffix (オプション) | (2) | ||||||||
| hex-constant integer-suffix (オプション) | (3) | ||||||||
| binary-constant integer-suffix (オプション) | (4) | (C23以降) | |||||||
ここで
-
decimal-constant
は、非ゼロの10進数字(
1、2、3、4、5、6、7、8、9)で始まり、その後に0個以上の10進数字(0、1、2、3、4、5、6、7、8、9)が続く -
octal-constant
は、数字のゼロ(
0)で始まり、その後に0個以上の8進数字(0、1、2、3、4、5、6、7)が続く -
hex-constant
は、文字シーケンス
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)が続く -
binary-constant
は、文字シーケンス
0bまたは文字シーケンス0Bで始まり、その後に1個以上の2進数字(0、1)が続く - integer-suffix は、指定された場合、以下のいずれかを含むことができる(ただし、unsigned接頭辞は他の接尾辞と組み合わせることが可能。2つの接尾辞が使用される場合、それらは任意の順序で現れることができる):
-
-
unsigned-suffix
(文字
uまたは文字U) -
long-suffix
(文字
lまたは文字L) または long-long-suffix (文字シーケンスllまたは文字シーケンスLL) (C99以降) -
bit-precise-int-suffix
(文字シーケンス
wbまたは文字シーケンスWB) (C23以降)
-
unsigned-suffix
(文字
|
オプションの単一引用符(
|
(C23以降) |
説明
a
から
f
までの文字は10から15までの10進数値を表します)。
以下の変数は同じ値に初期化されます:
int d = 42; int o = 052; int x = 0x2a; int X = 0X2A; int b = 0b101010; // C23
`タグ内のコードは翻訳しないという指示 - C++固有の用語は翻訳しないという指示 - 数値リテラルとコメント「// C23」はコードの一部として保持 コード内容の説明: - 10進数リテラル:42 - 8進数リテラル:052 - 16進数リテラル:0x2a, 0X2A - 2進数リテラル: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
整数定数の型
整数定数の型は、数値の基数と使用された integer-suffix に依存する型リストにおいて、値が収まる最初の型となります。
| 接尾辞 | 十進法の基数 | その他の基数 |
|---|---|---|
| 接尾辞なし |
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
|
both
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以降) |
both
ll
/
LL
および
u
/
U
|
unsigned long long int (C99以降) | unsigned long long int (C99以降) |
wb
または
WB
|
_BitInt ( N ) 値と符号ビットを格納できる最小のN(1より大きい)を幅とする_BitInt(N) (C23以降) | _BitInt ( N ) 値と符号ビットを格納できる最小のN(1より大きい)を幅とする_BitInt(N) (C23以降) |
both
wb
/
WB
and
u
/
U
|
unsigned _BitInt ( N ) 値が格納可能な0より大きい最小の幅Nを持つ (C23以降) | unsigned _BitInt ( N ) 値が格納可能な0より大きい最小の幅Nを持つ (C23以降) |
整数定数の値が接尾辞/基数の組み合わせで許可されるいずれの型にも収まらない場合、
接尾辞
wb
、
WB
、
uwb
または
UWB
を持たず
(C23以降)
コンパイラが拡張整数型(例:
__int128
)をサポートしている場合、定数は拡張整数型を与えられる可能性がある。それ以外の場合、プログラムは不適格となる。
注記
整数定数内の文字は大文字小文字を区別しません:
0xDeAdBaBeU
と
0XdeadBABEu
は同じ数値を表します
(唯一の例外は
long-long-suffix
で、
ll
または
LL
のいずれかであり、
lL
や
Ll
にはなりません
)
(C99以降)
。
負の整数定数は存在しません。 - 1 のような式は、定数によって表される値に 単項マイナス演算子 を適用します。
|
#if または #elif の制御式で使用される場合、すべての符号付き整数定数は intmax_t 型を持つかのように動作し、すべての符号なし整数定数は uintmax_t 型を持つかのように動作します。 |
(C99以降) |
整数定数は 整数定数式 で使用できます。
最大マンチ
のため、16進整数定数が
e
または
E
で終わり、その後に演算子
+
または
-
が続く場合、ソースコード内で空白または括弧を用いて演算子から分離する必要があります:
int x = 0xE+2; // エラー 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 整数定数 (p: 57-60)
- C17規格 (ISO/IEC 9899:2018):
-
- 6.4.4.1 整数定数 (p: 45-46)
- C11規格 (ISO/IEC 9899:2011):
-
- 6.4.4.1 整数定数 (p: 62-64)
- C99規格 (ISO/IEC 9899:1999):
-
- 6.4.4.1 整数定数 (p: 54-56)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 3.1.3.2 整数定数
関連項目
|
C++ ドキュメント
for
Integer literal
|