关于IEEE浮点数表示
计算机表示整数是精确的,这得益于任何一个整数都可以转换为若干个2的幂次方相加
关于整数其主要包含两大类:
无符号整数:以unsigned int 32位无符号整型为例:
其表示的值是所有相应二进制位中为1的位对应2的幂次方相加
因此表示范围为 0 =》2的32次方-1(32位中全为1) 不能表示负数
有符号整数:以int 32位整型为例:
第一位为符号位:表示 (若为1) 0(若为0) 记为k1
31位同无符号表示类似:表示对应各二进制为1的位的幂次方相加 记为k2
最终表示的数为 k1+k2
因此有符号整数表示范围为
- 正数:1=>2的31次方-1
- 负数:-1(全为1)=>2的31次方(第一位为1后面全为0)
- 零
关于移位:
左移是一致的:在右边空出的位上补0
右移包含:
逻辑右移:在左侧空出的位上补0 对应无符号数的 除以2
算术右移:在左侧空出的位上补上符号位(0 或 1)对应有符号数的 除以2
以-2为例子
- 其表示为: 11111111.....10 表示-2
- 算术右移结果: 11111111.....11 表示-1
关于浮点数:
在10进制中,把一个数表示成a与10的n次幂相乘的形式,科学计数法为:
这里a的范围为1=>10 之间的小数
可以用很少的信息表示范围很大的数
同样的由于计算机使用二进制,其类似的科学计数法为:
这里a的范围为1=>2之间的小数
对于N可以 用无符号整数的思想可以精确表示
而对于a 采取二进制小数的表示思想 即总是前面认为有一个1 而后各个二进位为1的负幂次方相加
因此一个浮点数可以采取三部分来表示符号位,阶码,尾数
浮点数以32位float为例:
①第一位为符号位 1表示负数
②中间8位表示一个无符号整数,范围为0-255 该整数减去一个 Bias 128 将得到阶吗的范围:
-126 ~ +127
③最后23位为二进制小数 也就是各部分二进制位为1的负幂次方之和
同事根据中间8位 阶码 可以分为以下几类情况
非规格化 中间8位全为0 ,主要用于描述 靠近0的部分 此时的大小取决于 二进制小数
最小的小数为 2的 负23次方 0000000......0001
最大的小数 (小于1) 2的-1次方+2的-2次方.....+2的-23次方 1111111......1111
规格化 中间8位不全为0或1
那么后面部分的二进制小数 默认加上前导1 即 1.+2的负幂次方
无穷大:中间8位全为1 或者NaN 2的255次方×若干个数 认为其无穷大