一、整数的储存方式
整数是编程中常用的一种数据类型,一般以补码的形式储存,C 语言使用 int 定义整数。
int 一般占用 4 个字节「Byte」,一共 32 bit。如果不考虑符号位:
00000000 00000000 00000000 00000000 : 最小值,数字 0
11111111 11111111 11111111 11111111 : 最大值,2 32 − 1 2^{32}-12
32
-1
整数的二进制表达方式
整数有三种表达形式 ,原码反码补码,正数的原码补码反码都相同,而负数的反码是原码的符号位不变,其他位取反,补码是反码加一
二、浮点数的储存
1、浮点数采用国际标准IEEE,任意一个浮点数可以表达成下面的形式:
IEEE 754对有效数字M和指数E,还有一些特别规定。
1 、M
1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形式,其中xxxxxx表示小数部分。
IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。
2、指数E
首先,E为一个无符号整数这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。但是,我们知道,科学计数法中的E是可以出现负数的,但E为无符号整数不存在符号位,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,使其变为一个正整数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。比如,2^-1的E是-1,所以保存成32位浮点数时,必须保存成-1+127=126,即01111110注意这个地方为存储值而非真实值.
具体实例
例如将7.5转换成二进制
这里的0.5化为二进制就是1 * 2^ -1
先化为二进制—>111.1
再化为标准形式V = (-1)^0 * 1.111 * 2^2;
s = 0, M = 1.011, E = 2;
E + 127 = 129—>10000001, M = 011 0000000000 0000000000
最后以0100 0000 1111 0000 0000 0000 0000 0000存入
化为十六进制为0x40f00000