整数リテラル は、小数点または指数部を持たない数値です。次のように表記できます。
これら 2 つの機能の両方に、以下の対応する拡張部分があります。C99 以外のモードでは、C99 以外の IBM long long 拡張を使用可能にできます。
| 表記 | 接尾部 | プロモーション順序 | |||||
|---|---|---|---|---|---|---|---|
| int | unsigned int | long int | unsigned long int | ![]() |
![]() |
||
| 10 進 | なし | + | + | + | |||
| 8 進、16 進 | なし | + | + | + | + | ||
| すべて | u または U | + | + | ||||
| 10 進 | l または L | + | + | ||||
| 8 進、16 進 | l または L | + | + | ||||
| すべて | u または U と l または L の両方 | + | |||||
| 10 進 | ll または LL | + | + | ||||
| 8 進、16 進 | ll または LL | + | + | ||||
| すべて | u または U と ll または LL の両方 | + | |||||
注:
|
|||||||
C99 モードでは、C99 の long long 機能が自動的に使用可能になります。
C99 の long long 機能を使用可能にした後、コンパイラーは C99 以外の IBM long long 拡張のすべての機能を持つようになります。範囲外のリテラルは別として、唯一の違いは、u または U を含む接尾部を持たない 10 進整数リテラルに対する特定の型指定の規則です。 C99 以外の IBM long long 拡張では範囲外のリテラルは、関連する IBM 拡張付き C99 の long long 機能では、暗黙の型 long long int または型 unsigned long long int を持つ場合があります。
#include <stdio.h>
int main(){
if(0>3999999999-4000000000){
printf("C99 long long");
}
else{
printf("non-C99 IBM long long extension");
}
}
この例では、値 3999999999 および 4000000000 は大きすぎて 32 ビットの long int 型に収まりませんが、unsigned long 型または long long int 型に収まります。C99 の long
long 機能を使用可能にすると、この 2 つの値は long long int 型を持つため、3999999999 と 4000000000 の差はマイナスです。一方、C99 以外の IBM long long 拡張を使用可能にすると、この 2 つの値は unsigned long 型を持つため、その差はプラスです。
値が long long int 型に収まらない場合、コンパイラーは unsigned long long int 型をそのリテラルに使用する可能性があります。この場合、コンパイラーは値が大きすぎることを示すメッセージを生成します。
| 表記 | 接尾部 | プロモーション順序 | |||||
|---|---|---|---|---|---|---|---|
| int | unsigned int | long int | unsigned long int | long long int | unsigned long long int | ||
| 10 進 | なし | + | + | + | + | ||
| 8 進、16 進 | なし | + | + | + | + | + | + |
| すべて | u または U | + | + | + | |||
| 10 進 | l または L | + | + | + | |||
| 8 進、16 進 | l または L | + | + | + | + | ||
| すべて | u または U と l または L の両方 | + | + | ||||
| 10 進 | ll または LL | + | + | ||||
| 8 進、16 進 | ll または LL | + | + | ||||
| すべて | u または U と ll または LL の両方 | + | |||||
10 進整数リテラル は 0 から 9 までの数字 を使用できます。最初の数字を 0 にすることはできません。数字 0 で始まる整数リテラ ルは、10 進整数リテラルとしてではなく、8 進整数リテラルとして解釈されます。
10 進整数リテラルの構文 .--------------. V | >>-digit_1_to_9----digit_0_to_9-+------------------------------><
10 進リテラルの例を次に示します。
485976
5
-433132211
+20
16 進整数リテラル は、数字 0 で始まり、その後に、x または X が続き、その後に、0 から 9 までの数字と a から f または A から F までの英字の組み合わせが続きます。英字 A (または a) から F (または f) は、それぞ れ、値 10 から 15 を表します。
16 進整数リテラルの構文 .------------------. V | >>-+-0x-+----+-digit_0_to_f-+-+-------------------------------->< '-0X-' '-digit_0_to_F-'
16 進整数リテラルの例を次に示します。
0x3b24
0XF96
0x21
0x3AA
0X29b
0X4bD