C类型转换

C语言支持隐式和显示类型转换。

隐式转换

隐式类型转换是指将范围小的类型赋值给范围大的类型,没有数据损失,可以直接操作。

整数间的隐式转换

整数间的隐式转换没有数据损失。

short i = 100;
int j = i;

整数到浮点数的隐式转换

浮点数容纳的范围大于整数,可以进行隐式转换。

不过,浮点数不能精确表示整数,可能导致问题。


int i = 100;
float j = i;

浮点数间

单精度浮点数可以隐式转换到双精度浮点数。

float i = 3.14;
double j = i;

显式转换

显示类型转换是指将范围大的类型赋值给范围小的类型,可能会产生数据丢失,需要使用(type)a强制类型转换运算符。

整数间的显式转换

整数间的显示转换会导致数据的截断,可能造成数据丢失。

int i = 65536;
short j = (short)i;//1 i的2个字节丢失

浮点数到整数的显式转换

浮点数到整数的转换会导致小数部分丢失,并有可能产生溢出。

float i = 3.14;
int j = (int)i;//3小数部分丢失
float i = 1e30;
int j = (int)i;//溢出导致错误结果

浮点数到浮点数的显示转换

双精度浮点数到单精度浮点数的转换有可能产生溢出。