自动类型转换的铁律:数据必须“瘦身”迁就变量

你知道吗,C语言里类型转换这事儿,其实一点都不难,关键是要搞清楚规则。你给变量赋值或者做运算的时候,C语言不会帮你偷偷四舍五入,也不会温柔地给你加个0.5,它直接按变量占的空间大小来裁剪数据。你把大衣服硬塞进小饼干盒,肯定会破;把整数硬塞进实数变量,信息就丢了。这就是自动类型转换的铁律:数据必须“瘦身”迁就变量,大箱子能装小件,小箱子绝不能装大件。赋值的时候,不管是把2.8放进int类型的变量里,还是把3放进double类型的变量里,都是这个理。运算的时候也是一样,谁的类型级别高,谁就说了算。类型高低排序大概是这样:char比int低,int比float低,float比double低。比如2.4加1.6,都是double类型,结果自然也是double;要是2.4加3,就得先把3抬成double再相加。 实战演练一下,假设v是int类型的值2,t是double类型的值2.8,这时候s等于v乘以t。第一步坑:两个不同类型的数相乘结果本该是double的5.6;第二步坑:5.6要塞进int类型的s里,直接砍掉小数部分变成5。所以s的值最后是5,不是5.6。这里面就有两个隐式转换过程。赋值转换是数据迁就变量;算术转换是表达式里谁的类型高谁就说了算。只要把这两条铁律背熟了,再复杂的隐式转换都能一眼看穿。