unsigned int与int的隐式转换

我们先看下这道简单的题目

#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类型

相关文章:深入解析unsigned int 和 int

坚持原创技术分享,您的支持将鼓励我继续创作!