使用 -std=c89 进行编译时,Oracle Developer Studio C 编译器包括数据类型 long long 和 unsigned long long(与数据类型 long 类似)。 long long 数据类型存储 64 位信息;long 使用 -m32 编译时存储 32 信息。long 数据类型使用 -m64 编译时存储 64 位信息。long long 数据类型不适用于 -std=c89 -pedantic(会发出警告)。
要打印或扫描 long long 数据类型,请在转换说明符前添加字母 ll 前缀。 例如,要以带符号的十进制格式打印 llvar(long long 数据类型的变量),请使用:
printf("%lld\n", llvar);
某些二进制运算符会转换其操作数类型来生成常见类型,这也是结果类型。这些转换称为常见算术转换。针对 -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。