浮点类型存储:
首先我们看看整数类型存储的存储范围:
signed char : -2^7 2^7 -1
unsigned char : 0,2^8 -1
signed short : -2^15 ,2^15 -1
unsigned short : 0,2^16 -1
int : -2^31 ,2^31 -1
unsigned int : 0,2^32 -1
二进制:
计算机中如何表示正负:
用二进制的最高位来表示正负 0表示正 1表示负
"最高位": 每种类型 二进制位数不一样 但一定要是从左往右第1个二进制位
二进制:
原码:用二进制的最高位来表示符号位 0表示正 1表示负
反码:正数的反码和原码一样 负数的反码 符号位不变,其它位按位取反
补码:正数的补码和原码一样 负数的补码 等于其原码 符号位不变(一定要为1),其它位按位取反+1
为什么二进制要发明反码和补码,为什么不直接使用原码?
是因为用原码进行数学计算时 结果不正确
非常重要:
计算机中存储数据都是以**补码**的形式存储。
如何把一个十进制的数换算成二进制?
除2求余 二进制是从下往上
举个例子:
-5+3= 2
-5用二进制原码为1000 0101
经过取反加一得到补码 1111 1011
3的原码与补码一样都为0000 0011
相加即为 :原码1000 0010 <— 1111 1101 <— 补码1111 1110 = -2
二进制转八进制:
三个二进制位对应一个八进制位
二进制转十六进制:
四个二进制位对应一个十六进制位
浮点类型存储:
float: 4byte ±3.4*10^38
存储方式和整数是不一样的
32bit = 1符号位+8个指数位(指数有正有负)+23个小数位
5.5 ==> 0101.1
--> 1.011 * 2^2
5.25 ==> 0101.01
--> 1.0101 * 2^2
浮点数首先求二进制 --> 表示成 1.xxxx * 2^y 次方
xxxx 就是用23个小数位来存储
y 就是指数位存储
0.25 ==> 0.01 --> 1.0 * 2^-2
最大值:
+-1.1111111 (小数点后有23个1) * 2^127
=(2^0+2^-1+2^-2+....+2^-23)*2^127
=(2^0+2^-1+2^-2+....+2^-23 + 2^-23-2^-23) * 2^127
=(2^1 - 2^-23) * 2^127
= 2^128 - 2^104
同理:double 8byte
64bit = 1符号位+11个指数位+52个小数位
=(2 - 2^-52) * 2^1023
=2^1024 - 2^971
+-1.79*10^308
ps:2^10 +2^9+ … +2^0 + 2^0 - 2^0 = 2^11 - 1
2^0 +2^-1 +2^-2 +…+2^-23 + 2^-23 -2^-23 = 2^1 - 2^-23