Oracle® Developer Studio 12.5:C 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

2.7 long long 数据类型

使用 -std=c89 进行编译时,Oracle Developer Studio C 编译器包括数据类型 long longunsigned long long(与数据类型 long 类似)。 long long 数据类型存储 64 位信息;long 使用 -m32 编译时存储 32 信息。long 数据类型使用 -m64 编译时存储 64 位信息。long long 数据类型不适用于 -std=c89 -pedantic(会发出警告)。

2.7.1 打印 long long 数据类型

要打印或扫描 long long 数据类型,请在转换说明符前添加字母 ll 前缀。 例如,要以带符号的十进制格式打印 llvarlong long 数据类型的变量),请使用:

printf("%lld\n", llvar);

2.7.2 常见算术转换

某些二进制运算符会转换其操作数类型来生成常见类型,这也是结果类型。这些转换称为常见算术转换。针对 -std=c11,在 9899:2011 ISO/IEC C 编程语言标准中定义了常见算术转换。针对 -std=c99,在 9899:1999 ISO/IEC C 编程语言标准中定义了常见算术转换。针对 -std=c89 -pedantic,在 9899:1990 ISO/IEC C 编程语言中定义了常见算术转换。针对 -std=c89 -pedantic=no-Xs 标志,常见算术转换定义如下:

  • 如果两个操作数中的任何一个的类型为 long double,则另一个操作数转换成类型 long double

  • 否则,如果两个操作数中的任何一个的类型为 double,则另一个操作数转换成类型 double

  • 否则,如果两个操作数中的任何一个的类型为 float,则另一个操作数转换成类型 float

  • 否则,对两个操作数执行整型提升。然后,应用以下规则:

    • 如果两个操作数中的任何一个的类型为 unsigned long long int,则另一个操作数转换成类型 unsigned long long int

    • 如果两个操作数中的任何一个的类型为 long long int,则另一个操作数转换成类型 long long int

    • 如果两个操作数中的任何一个的类型为 unsigned long int,则另一个操作数转换成类型 unsigned long int

    • 否则,当使用 –m64 进行编译时,如果一个操作数的类型为 long int,另一个操作数的类型为 unsigned int,这两个操作数都会转换成类型 unsigned long int

    • 否则,如果两个操作数中的任何一个的类型为 long int,则另一个操作数转换为类型 long int

    • 否则,如果两个操作数中的任何一个的类型为 unsigned int,则另一个操作数转换为类型 unsigned int

    • 否则,两个操作数的类型都为 int