数据类型:
1.基本类型(整形,浮点型,字符型)
2.构造类型(数组,结构体,联合,枚举)
3.指针类型
查看数据范围:整形范围(limits.h) 浮点型类型(flaot.h)
eg:有符号的char的表示范围:0000 0000~1111 1111(-128~127)其中最高位表示符号位,0为正 1为负
其实数据的存储和访问就下像作图这个圈一样,当你给它的127+1它就会变成128
整形变量:
一般来说字长为32的情况下,整形表示32位,短整形16位,长整形32位
数据在计算机中以补码的形式存储
正数的原反补码均相同,负数的补码是它的反码+1得到
浮点数:
整数的存储我们都十分的熟悉,但浮点数在我们的计算机里是怎么存储的呢?
我们试着来实现以下程序:
int main() { int num=9; float *p=(float *)# printf("%d",num); printf("%f",*p); }
int main() { int num; float *p=(float *)# *p=9.0; printf("%d",num); printf("%f",*p); }
为什么会出现这样的现象呢?
这很正常,因为浮点数在内存中的存储方式和我们的整形变量是完全不一样的
那么浮点数是怎么存放的呢
一般来说我们使用科学计数法将10进制浮点数表示成N.XXXX*10^M;
而浮点数在计算机里存放时,我们的计算机也将它表示成(-1)*S*M*2^E
其中S表示符号位,M表示尾数,E表示指数
在字长32的计算机中
最高位存放符号位,中间8位存放指数部分,剩下的部分存放尾数。
我们来看看9.0在内存中是怎么存放的!
0100 0001 0001 0000 0000 0000 0000 0000
我们现在以浮点数的存储方式将它分开来看
0 10000010 001 00000000 00000000 00000000
第一位表示符号位 中间八位是阶码 最后紧跟存尾数
9.0在计算机里先表示为1001 以IEEE754标准表示成1.001*2^(3)
在我们存入内存时必须给我们的E加上中间数来调整,对于8位的E我们加上127来调整
所以中间部分表示为1000 0010 (3+127)
现在你会了吗?
原文地址:http://zimomo.blog.51cto.com/10799874/1714854