如下面的一段小程序:
void main(void)
{
unsigned char a;
unsigned int b;
b=100*4;
a=b;
printf(“%d”,a);
while(1);
}
如果你是细心的朋友定会发现a的值是不会等于100*4的。是的,a和b一个是char类型一个是int类型,从以前的学习可知char只占一个字节值最大只能是255。但编译时为何不出错呢?可知b=100*4就可以得知b=0x190,最后输出a为144,即0X90,也就是输出b的低8位。这是因为执行了数据类型的隐式转换。
隐式转换是在程序进行编译时由编译器自动去处理完成的。所以有必要了解隐式转换的规则:
1.变量赋值时发生的隐式转换,"="号右边的表达式的数据类型转换成左边变量的数据类型。就如上面例子中的把INT赋值给CHAR字符型变量,得到的CHAR将会是INT的低8位。如把浮点数赋值给整形变量,小数部分将丢失。
2.所有char型的操作数转换成int型。
3.两个具有不同数据类型的操作数用(数学)运算符连接时,隐式转换会按以下次序进行:如有一操作数是float类型,则另一个操作数也会转换成float类型;如果一个操作数为long类型,另一个也转换成long;如果一个操作数是unsigned类型,则另一个操作会被转换成unsigned类型。
对应的显示转换就用“(数据类型)操作数”即可实现。