上溢和下溢例子
正如上图发生在两个正数或者两个负数相加时,超过了最大值就是上溢,小于了最小值就是下溢,发生溢出的一个特点就是变成了相反符号位的数,例如上溢变成负数,下溢变成了正数。
正如上图所示如果A和B两个数相加,a表示A的符号位,b表示B的符号位,s表示A和B相加后的结果的符号位。
以情形1举例A=00101,B=00111,结果为01100,a=0,b=0,s=0,代入公式后:
0*0*(not 0) (not 0 *not 0) *0=0 (1*1)*0=0因此没有溢出。
以情形2举例A=01100,B=01101,结果为00111,a=0,b=0,s=1,代入公式后:
0*0*(not 1) (not 0*not 0) * 1=0 (1*1)*1=1,因此溢出了
以情形3举例A=10100,B=10011,结果为11001,a=1,b=1,s=0,代入公式后:
1*1*(not 0) (not 1*not 1) * 0=1*1 0=1,因此溢出了。
1.3 【无符号二进制整数】和补码的转化我们知道同一个二进制序列,【无符号二进制整数】和补码表示的十进制可能不同,可以通过一个公式在两者进行转化
对于一个n位二进制序列,x为补码(x在n位补码最小值和最大值范围内),补码转化无符号数公式如下图
补码转化为无符号二进制数
举例如n=16,x=-12345,它对应的【无符号二进制整数】就是:-12345 2的16次方即65536=-12345 65536=53191
对于一个n位二进制序列,u为无符号数(u在n位无符号数最小值和最大值范围内),无符号数转化补码公式如下图
无符号二进制整数转化为补码
举例如n=16,u=53191,由于u>2的(16-1)次方-1即32767,因此补码=53191-65536=-12345
【二进制浮点数】的存储和运算浮点位置计数法与整数位置计数法类似,如下图所示