C语言系列之强制类型转换(一)
例子:
#include <stdio.h>
{
char cChar; //字符型变量
short int iShort; //短整型变量
int ilnt; //整形变量
float fFloat=70000; //单精度浮点型
cChar=(char)fFloat; //强制转换赋值
iShort=(short)fFloat; //
ilnt=(int)fFloat; //
printf("the char is: %c\n",cChar); // 输出字符变量值
printf("the long is:%ld\n",iShort); //输出短整型变量值
printf("the int is: %d\n",ilnt); //输出整型变量值
printf("the float is:%f\n",fFloat); //输出浮点型变量值
return 0; //返回值为0
}
输出结果:
the char is: p
the long is: 4464
the int is;70000
the float is 70000.000000
问题一:
the char is: p
为什么将单精度浮点型转换成字符型的时候输出结果为p;
根据C语言的结构而言,字符型输出方式可以用字符或者用ASCLL码,如下图所示
最简单的例子如:
cChar1='a';
cChar2=97;
printf("%c/n",cChar1);
printf("%c/n",cChar2);
输出结果:
a
a
因为a的ascll码就是97;
重点:
ascll码表一共有128位,当超过128位的时候,又重新开始。
例如例子中的数值为70000
70000/128=546余112;
由ascll码表可知,第112位为p;
所以输出结果为p
问题二
the long is: 4464
单精度浮点型转换成短整型的时候为什么输出为4464
我们知道短整型的区间为-32768至32767,两者相减加1等于65536
为什么要加1,是因为还有一个整数0
重点:
同上;
短整型一共有65536位,当超过这么位数时,又重新开始
我们通过题目可以知道
70000-65536=4464
所以输出结果为4464
总结
有高级别向低级别转换,可能会出现数据丢失,这种丢失往往是按照一个一个区间进行丢失,
例如上面讲到的有浮点型转换成字符型的时候是按照ascll码区间进行数据丢失的,
而浮点型转换成短整型时是按照短整型的数据区间进行丢失的。