整数字面值

整数文字 是没有小数点或指数部分的数字。 它们可以表示为:
整数文字可能具有指定其基本的前缀或指定其类型的后缀。

整数文字语法

读取语法图跳过可视语法图decimal_constant实例常量十六向常量lLllLLuUuUlLllLL

long long 功能部件

有两个 long long 功能部件:
  • C99 long long 功能部件
  • non-C99 long long 功能部件
注: 对于两个 long long 功能部件,整数文字的语法相同。

pre-C99 和 pre-C++11 方式 中支持的整数字面值的类型

下表列出了整数字面值,并在未启用 C99 long long 功能时显示可能的数据类型。
表 1. pre-C99 和 pre-C++11 方式S1 中支持的整数字面值的类型
表示 后缀 可能的数据类型
    整数 unsigned int 长整型 无符号 long int
IBM 扩展
长长整数
IBM 扩展
无符号长整型 int
十进制 +   + +2    
八进制,十六进制 + + + +    
全部 uU   +   +    
十进制 lL     + +    
八进制,十六进制 l L     + +    
全部 uU 以及 lL       +    
十进制 ll LL         + +
八进制,十六进制 llLL         + +
全部 uU 以及 llLL           +
注意:
  1. 如果未启用任何 long long 功能部件,那么整数字面值的类型将包括此表中除最后两列以外的所有类型。
  2. IBM 扩展在 C++98 和 C++03 标准中,此处无需填写 unsigned long int 类型。 C++ 编译器仅出于兼容性目的在实现中包含类型。

C99 和 C++11 中支持的整数文字的类型

以下示例演示了当您启用不同的 long long 行为时编译器的不同行为:
#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 longlong long int 类型。 如果启用 C99 long long 功能,那么这两个值具有 long long int 类型,因此 3999999999 和 4000000000 的差异为负数。 否则,如果启用 non-C99 IBM long long 扩展,那么这两个值具有 unsigned long 类型,因此差异为正数。
禁用 C99 和 non-C99 long long 功能时,具有下列其中一个后缀的整数文字会导致严重的编译时错误:
  • llLL
  • uU 以及 llLL

C++11为了严格遵守 C++11 标准,编译器引入了扩展的整数安全行为,以确保有符号值在提升后不会变成无符号值。 启用此行为后,如果没有包含 uU 的后缀的十进制整数字面值无法由 long long int 类型表示,那么编译器将发出 错误 消息以指示字面值超出范围。 扩展整数安全行为是 C99 long long 功能与相关 IBM 扩展和 C99 long long 功能之间的唯一区别。C++11

下表列出了启用 C99 long long 功能部件时的整数字面值并显示可能的数据类型。
表 2。 C99 和 C++11 中支持的整数字面值的类型
表示 后缀 可能的数据类型
    整数 unsigned int 长整型 无符号 long int 长长整数 无符号长整型 int
十进制 +   +   + +1
八进制,十六进制 + + + + + +
全部 uU   +   +   +
十进制 lL     +   + +1
八进制,十六进制 l L     + + + +
全部 uU 以及 lL       +   +
十进制 ll LL         + +1
八进制,十六进制 llLL         + +
全部 uU 以及 llLL           +
注意:
  1. C++11如果启用了扩展整数安全行为,则编译器不支持这种类型。

十进制整数文字

十进制整数文字 包含任何数字 0 到 9。 第一个数字不能是 0。 以数字 0 开头的整数文字解释为八进制整数文字,而不是十进制整数文字。

十进制整数文字语法

读取语法图跳过可视语法图 digit_1_to_9 digit_0_to_9

请参阅以下 十进制文字示例:

485976
5
加号 (+) 或减号 (-) 可以在十进制整数文字之前。 运算符被视为一元运算符,而不是字面值的一部分。 请考虑以下示例:
-433132211
+20

十六进制整数文字

十六进制整数文字 以 0 数字开头,后跟 x 或 X ,后跟数字 0 到 9 和字母 a 到 f 或 A 到 F 的任意组合。 字母 A (或 a) 到 F (或 f) 分别表示值 10 到 15。

十六进制整数文字语法

读取语法图跳过可视语法图0x0Xdigit_0_to_fdigit_0_to_F

请参阅以下 十六进制整数文字示例:

0x3b24 
0XF96 
0x21 
0x3AA 
0X29b 
0X4bD

八进制整数文字

八进制整数文字 以数字 0 开头,并包含任何数字 0 到 7。

八进制整数文字语法

读取语法图跳过可视语法图 0 digit_0_to_7

请参阅以下 八进制整数文字示例:

0 
0125 
034673 
03245