某些二进制运算符会转换其操作数类型以生成常见类型,这也是结果类型。这些转换称为常见算术转换。针对 -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。