C
语言中强制类型转换总结
1.
自动类型转换
● 字符型变量的值实质上是一个 8 位的整数值,因此取值范围一般是-128~127,char 型
变量也可以加修饰符 unsigned,则 unsigned char 型变量的取值范围是 0~255(有些机器把
char 型当做 unsighed char
型对待, 取值范围总是 0~255)
。
● 如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转
换为较高类型,然后再参加运算,转换规则如下图所示。
double ←── float
高
↑
long
↑
unsigned
↑
int ←── char,short
低
● 图中横向箭头表示必须的转换,如两个 float 型数参加运算,虽然它们类型相同,但仍
要先转成 double 型再进行运算,结果亦为 double
型。 纵向箭头表示当运算符两边的运算
数为不同类型时的转换,如一个 long 型数据与一个 int 型数据一起运算,需要先将 int 型
数据转换为 long
型, 然后两者再进行运算,结果为 long 型。所有这些转换都是由系统自
动进行的, 使用时你只需从中了解结果的类型即可。这些转换可以说是自动的,但然,C
语言也提供了以显式的形式强制转换类型的机制。
● 当较低类型的数据转换为较高类型时,一般只是形式上有所改变, 而不影响数据的实
质内容, 而较高类型的数据转换为较低类型时则可能有些数据丢失。
2.
赋值中的类型转换
当赋值运算符两边的运算对象类型不同时,将要发生类型转换, 转换的规则是:把赋值
运算符右侧表达式的类型转换为左侧变量的类型。具体的转换如下:
(1)
浮点型与整型
● 将浮点数(单双精度)
转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。
将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个 0。
注意:赋值时的类型转换实际上是强制的。
(2)
单、双精度浮点型
● 由于 C 语言中的浮点值总是用双精度表示的,所以 float 型数据只是在尾部加 0 延长为