1.整数
有符号整数
第一位为符号位 1代表负数 0代表正数
举例: signed char
8 ---------------------> 0000 1000
-8 ----------------------> 1111 1000 (补码形式存储)
补码存储(计算)的妙处:
举例:-8 + 8 = 0 ------> 1111 1000 + 0000 1000 = 1 0000 0000 (左边的1被挤出去)
signed short , signed int 同理
溢出情况举例:
signed char A = 127 ----------------------- > A = 01111111
A+1 = -128 ----------------------->01111111 + 1 = 10000000 ( -128 = 10000000 )
同理:
signed char A = -128 ------------------------> A = 10000000
A-1 = 127 ----------------------->10000000 - 1 = 01111111 ( 127 = 01111111)
无符号整数
没有符号位的说法 例如unsiged char 取值范围为 0~255
举例: unsigned char
254 --------> 1111 1110
溢出情况举例:
与有符号类似:
unsigned char A = 254
A+2 = 1 ----------------------> 1111 1110 + 0000 0010 = 1 0000 0001 (左边的1被挤掉)
2.浮点数
浮点数存储:类似科学计数法
科学计数法:
三个部分:正负号;
有效数据(范围是1~10)
位数 10 ^ n
浮点数的三个部分(S, E, M):
S 表示符号 E表示位数(理解为小数点的偏移量) M表示有效数字:
32位F(float):1S 8E 23M : 第1位表示正负 接下来8位表示小数点位置 最后23位代表有效数字;
64位D(double):1S 11E 52M : 与32位同理 ,1位正负 11位表述小数点位置 最后52位代表数字;
以float举例:
S:
S为1代表负数 为0代表正数 :可看做(-1)^S
E:
E是无符号整数:E取值范围:0~255 中间数为127 ,E的值减去127为实际偏移量,实际偏移量范围:-127~128
例如:当E为128 实际偏移量为128-127 = 1,表示小数点向右移动一位
(double类型 :E有11位二进制数, 可表示小数点偏移量为:-1023~1024)
E的三种情况:
E全1:表示无穷大
E全0:有效数字M由1.xxxxxx 变为 0.xxxxx 此时该浮点数表示正负0(无限趋近0)
E不全为0或不全为1则正常计算
M:
M表示有效数字,表示的数字范围为:1<=M<=2
M的含义:
当M 为 1111 1111 0000 0000 0000 000 时,实际含义为1.1111 1111(二进制) ,其中小数点左边的1被省略 读取时自动加上
至于为什么省略,是因为小数点左边那个数字永远是1,所以可以省。
举例:
- 0. 125 以float形式存储
S为1 (-0.125 为负数)
S的二进制表示为1
M为 0(表示有效数字为1.0000 0000 0000 0000 0000 000)
M的二进制表示为0000 0000 0000 0000 0000 000
E为 124 (表示小数点偏移为-3 ) E 减去127表示实际偏移量
E的二进制表示为 0111 1100
综上, -0.125实际存储为: