Linux C数据类型转换

类型的自动转换

1、赋值表达式中的类型转换。

在赋值运算中进行的类型转换,是将右边的数值转化为与左边变量相同的数据类型,再将该数值赋予左边的变量。但是如果右边的数值超出左边变量所能表达的数值范围,系统会对该数值进行截取处理,然后再赋值给变量。

(1)实型数据赋值给整型变量,需要舍去实型数据的小数部分,而只将整数部分赋值给整型变量

(2)整形数据赋值给实型变量。整形数据数值不变,将整形数据以实型数据的存储形式存储到相应的实型变量中。即增加整型数据的小数部分(补零)。

(3)字符型数据赋值给整型变量。是将字符型数据的ASCII码值存储到整型变量的低字节中。如果低字节的最高位为0,则其高字节的所有位全部扩展为0,即低字节的“高位扩展”;

(4)整型数据赋值给字符型变量。是将整形数据的低字节中存储的内容存放于字符型变量中,即“高位截断”

(5)int 型数据赋值给long int型变量,是将int 型数据的值存储到long int变量的低字节中。

2、不同类型数据的混合运算

当对不同数据类型的数据进行运算时,要进行类型转换,即由占内存空间少的类型向存储空间多的转换,由低级类型的运算对象向高级类型的运算对象转换,然后再进行同类型的运算,这个转换过程是由编译系统自动完成的,称为自动类型转换或隐式类型转换。再转换过程中精度不会提高,变量类型也不会转变,改变的只是数值类型。

Linux C 规定在不同类型的混合运算时,char型必须转换为int 型,float型必须转换为double 型这是因为double型提供的有效位数多于float型。进行转换后可以提高运算的精度。

3、强制类型转换

除了以上形式的类型的转换,也可以通过类型转换运算符来实现自己规定某个表达式要转换成何种类型,即强制类型转换,也称显示转换。例如

(double)a      /**把变量a的值转换为double型**/

(int)(i+j)   /**把i和j的计算结果转换为int型**/

需要注意的是,强制类型转换再将高类型转换为低类型的时是一种不安全的转换,因为数据的精度会受损。另外,强制类型是一次性的,暂时性的,强制类型转换得到的是一个所需类型的中间量,原表达式的类型并不会发生改变。

猜你喜欢

转载自blog.csdn.net/songyayaya/article/details/80207886