例子:
#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 short is:%ld\n",iShort); //输出短整型变量值
printf("the int is: %d\n",ilnt); //输出整型变量值
printf("the float is:%f\n",fFloat); //输出浮点型变量值
return 0;
}
输出结果:
the char is: p
the short is: 4464
the int is;70000
the float is 70000.000000
问题:为什么float 类型的70000 转成char型变成了 p
首先数据类型本质是什么?底层硬件最小的存储单元只有开\关两种状态,对应一个数据中就是一个bit 。 bool数据类型就占用一个bit空间,因为它只有是或否两种状态,但是我们大千世界有太多太复杂的东西需要处理,在硬件条件不变的情况下,我们只有通过更多的这种开关原件组合来表示更多的信息,因此设计编程语言的人就根据实际把数据分出来了char、int、double等类型,所以:数据类型的本质是固定大小内存块的别名。char占的内存是一个字节,也就是8bit,而70000的二进制表示是10001000101110000 char面对这个,只能按照自己的能力取了低8位来解释,所以就是01110000 就是112 在ascii码中就是p;
同理 short 占两个字节 就是16bit 取低16位解释 结果也就是4464。
重点:在开发中涉及数据赋值的时候,一定要注意数据的最大范围,把一个超过一个类型最大容量的数赋值给该类型的变量,这将存在着不确定的隐患,一个细心的有经验的工程师应该要避免写出存在这样的隐患的代码。
附: