C语言中不同数值类型之间隐式转换的优先级

先给出结果图,画的不好看别怪

C语言中不同数值类型之间隐式转换的优先级

在我的百般测试下得出了这个结果,供大家参考,用的平台是win10 的vs2019,其他编译器不知道,不过我觉得应该都差不多。

所采用的评判两个数值类型之间能不能隐式转换的标准是:两种数值类型的变量之间相互赋值,生成之后看“输出”里面有没有相应的警告信息,比如“warning C4244: “=”: 从“long double”转换到“float”,可能丢失数据”这样的就说明不能隐式转换。

这里来解释一下:
1.short即short int,long即long int;
2.所有的整数型(包括char、short、int和long)分为有符号型和无符号型,有符号型前面加signed,但一般省略,无符号型前加unsigned,不可省略,另外实数型(包括float、double、long double)没有是否有符号的区分。
3.上图一个框框代表一种数值类型,数值类型是以一个数值占用的字节数为区分的(这样的话,long 和int 其实应该放到一个框里面),同一个框中的可以相互转换,即有符号和无符号、long型和非long型之间可以相互隐式转换;
4.箭头表示能够按相应的方向隐式转换而不会有警告;
5.越向下优先级别越高,这里的越高指的是能够隐式转换的方向越少,级别低的可以顺着箭头隐式转换到任何比自己级别高的类型;