用二进制补码计算的问题
来源:学生作业帮 编辑:神马作文网作业帮 分类:数学作业 时间:2024/11/10 19:28:30
用二进制补码计算的问题
用二进制计算下列格式 -5+15
由于-5+15=10
用二进制计算下列格式 -5+15
由于-5+15=10
你的理解不正确,你的这两个数异号,运算结果永远不会溢出,按照你的5位运算后,第六位的进位实际上没有运算结果的意义,纯粹是补码运算带来的,因此就丢掉了,结果是01010,正好是+10的补码
根据补码运算规则,只有无符号数的相加运算的最高位有进位才表示溢出
还有一种溢出的情况就是同号相加符号改变:
两个正数相加的结果是负数:01011+ 01100 = 10111,用10进制表示就是11+ 12 = -9
或者两个负数相加成为正数:10101 + 11001 = 1 01110,用10进制表示就是-11 + (-7) = 14
具体结果为什么如此,请从补码的定义考虑
顺便说一句,其实无论多少位的补码运算都是如此
再问: 01011+ 01100 是不是需要对位数进行一下改变,因为结果23小于2的六次方,所以数值位变成6位:001011+001100,这样相加就变成了010111(即+23)。这样做来防止溢出对不?同样另外一个运算也是增加数值位位数,最后得出1101110,再求一遍反码得到1010010,恰好为-18的正码。这样做是否正确? 请问你所说的无符号数运算是怎么回事呢?
再答: 你说的完全对,增加字长(位数)当然可以防止溢出,或者是像浮点数一样来浮动小数点规整小数的形式,但是都和机器字长等有关系,不能不限制地增加 无符号数就是所有位数都用来表示数字,没有符号位,数据范围从0开始,没有负数
根据补码运算规则,只有无符号数的相加运算的最高位有进位才表示溢出
还有一种溢出的情况就是同号相加符号改变:
两个正数相加的结果是负数:01011+ 01100 = 10111,用10进制表示就是11+ 12 = -9
或者两个负数相加成为正数:10101 + 11001 = 1 01110,用10进制表示就是-11 + (-7) = 14
具体结果为什么如此,请从补码的定义考虑
顺便说一句,其实无论多少位的补码运算都是如此
再问: 01011+ 01100 是不是需要对位数进行一下改变,因为结果23小于2的六次方,所以数值位变成6位:001011+001100,这样相加就变成了010111(即+23)。这样做来防止溢出对不?同样另外一个运算也是增加数值位位数,最后得出1101110,再求一遍反码得到1010010,恰好为-18的正码。这样做是否正确? 请问你所说的无符号数运算是怎么回事呢?
再答: 你说的完全对,增加字长(位数)当然可以防止溢出,或者是像浮点数一样来浮动小数点规整小数的形式,但是都和机器字长等有关系,不能不限制地增加 无符号数就是所有位数都用来表示数字,没有符号位,数据范围从0开始,没有负数