我们先看下这道简单的题目
#include<stdio.h> int main() { unsigned int a = 6; int b = -20; (a + b>6)? puts(">6"):puts("<=6"); return 0; }
来看看小红和小明是怎么解释这道题目的
小红:这题目好简单啊,6+(-20)=-14 肯定小于6的啦,所以毫无疑问,输出<=6;
小明:肯定不是看上去这么简单的,a是无符号整型数,而b是有符号整型数,int会自动转换成unsigned类型,而转换之后数字都溢出了,肯定大于6,所以输出>6
正确的答案是>6,
正如小明说的一样 数据会转换 所以可以由此总结出转换规则:存储长度较短的转换成存储长度较长的,并且不丢失信息;
常见类型转换顺序:char 、short -> int -> unsigned -> long int -> double <- float
即运算中有double类型,则其他类型会全部转换成double类型。
默认int char long double等都是有符号型的 所以在转换的时候有unsigned类型(没有比这个更高等级的类型的时候)就会默认转换成unsigned类型