C基本数据类型的转换顺序

转载:https://blog.csdn.net/whui19890911/article/details/8678988

自动类型转换:自动将精度低,表示范围小的运算对象类型向精度高表示范围大的运算对象类型转换。以便得到较高精度的运算结果。
double ←—— float 高 
↑ 
long 
↑ 
unsigned 
↑ 
int ←—— char,short 低 
● 图中横向箭头表示必须的转换,在表达式中有char 或者short型数据,一律转换为int 型参加运算。如两个float型数参加运算。

    在表达式中有float型,一律转化成double型参加运算。 

纵向箭头表示当运算符两边的运算数为不同类型时的转换,如一个long 型数据与一个int型数据一起运算,需要先将int型数据转换为long型, 然后两者再进行运算,结果为long型。所有这些转换都是由系统自动进行的, 使用时你只需从中了解结果的类型即可。这些转换可以说是自动的。

字符型数据是指字母、数字和各种符号等用ASCII值表示的字符,0-127存储的是基本ASCII值,128-255是扩展ASCII值。C语言允许使用signed unsignd 修饰char 类型数据,但是只有在按照整型数据形式输出时,才能显示不同定义的区别。

当赋值运算符两边的运算对象数据类型不一致时,系统会自动将赋值号右边表达式的值转换成左边变量类型后再赋值。具体如下:

(1) 浮点型与整型 
● 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。 
将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0。注意:赋值时的类型转换实际上是强制的。 
(2) 单、双精度浮点型 
● 由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为doub1e型数据参加运算,然后直接赋值。doub1e型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。
(3) char型与int型 
● int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。 
● char型数值赋给int型变量时, 一些编译程序不管其值大小都作正数处理,而另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。对于使用者来讲,如果原来char型数据取正值,转换后仍为正值;如果原来char型值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不同。
(4) int型与1ong型 
● long型数据赋给int型变量时,将低16位值送给int型变量,而将高16 位截断舍弃。(这里假定int型占两个字节)。 
将int型数据送给long型变量时,其外部值保持不变,而内部形式有所改变。 
(5) 无符号整数 
● 将一个unsigned型数据赋给一个占据同样长度存储单元的整型变量时(如:unsigned→int、unsigned long→long,unsigned short→short) ,原值照赋,内部的存储方式不变,但外部值却可能改变。
● 将一个非unsigned整型数据赋给长度相同的unsigned型变量时, 内部存储形式不变,但外部表示时总是无符号的。

猜你喜欢

转载自blog.csdn.net/modi000/article/details/113859295