二元转换(Binary conversions)

二元转换发生在二元操作符的两个操作数以及条件表达式的第二、第三操作数。

进行二元转换之前,每个操作数先独立的进行一元转换,之后,如果尚需转换的话,再进行二元转换。

二元转换的基本规则是小类型转换为大类型,比如一个操作数是long double,则另一个操作数也转换成long double,依次类推。唯一的例外是有符号整数(signed)和无符号整数(unsigned)混合的时候,具体规则如下:

一元转换类似,标准C与Traditional C在涉及无符号整数的规则上有区别,要特别小心。

例如,下面的代码在两种标准的编译器上编译运行,将获得不同的结果:

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
        if (-1 < (unsigned char)1)
                printf("-1 is less than (unsigned char)1: ANSI semantics.\n");
        else
                printf("-1 NOT less than (unsigned char)1: K&R semantics.\n");
 
        exit(0);
}