computer:c:tips:binary_conversions
二元转换(Binary conversions)
二元转换发生在二元操作符的两个操作数以及条件表达式的第二、第三操作数。
进行二元转换之前,每个操作数先独立的进行一元转换,之后,如果尚需转换的话,再进行二元转换。
二元转换的基本规则是小类型转换为大类型,比如一个操作数是long double,则另一个操作数也转换成long double,依次类推。唯一的例外是有符号整数(signed)和无符号整数(unsigned)混合的时候,具体规则如下:
- 有符号整数的级别等于或小于无符号类型的级别时,转换成该无符号类型;
- 有符号整数的级别大于无符号类型的级别时,又分两种情况:
- 如果有符号类型能容纳无符号类型的所有值,则转换成该有符号类型(Traditional C转换成该有符号类型对应的无符号类型);
- 如果有符号类型无法容纳无符号类型的所有值,则转换成该有符号类型对应的无符号类型。
与一元转换类似,标准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); }
computer/c/tips/binary_conversions.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1