-138的补码怎么求?别吐槽我。。

number_lock 2012-02-01 01:23:46
当8086cpu在计算某数-138时,会先求-138的补码然后相加,问题是-138的补码怎么求?真心求教啊。。
...全文
1086 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
masmaster 2012-02-01
  • 打赏
  • 举报
回复
零扩展用于无符号数,符号扩展用于补码数字,补码数字扩展的规则是添加最好有效位的值的副本。在机器中,有符号数用补码表示。
asd605499941a 2012-02-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 asd605499941a 的回复:]

我是这样理解的:
因为最高位为符号位
1为负,0为正
如果是8位的话
那么可以改动后7位数字
变化就有2^7次方种,可以表示2^7个数
2^7=128,当符号位为0,后面可以表示128个数,即(00000000~01111111)就是0到127
当符号位为1,后面也可以表示128个数,即(10000000~11111111)以为符号位为1的都是负数,所以他(10000000~111……
[/Quote]
还有可以对一个二进制数进行扩展
如:21的8位二进制和16位的二进制补码如下:
8 位:00010101
16位:0000000000010101
-3的8位二进制补码和16位二进制补码如下:
8位11111101
16位1111111111111101
扩展的都是他的符号位
如果你只是要求要8位数的话也可以只要最右面那8位
就像如果你要8位的-138补码也可以当做01110110
foilsman 2012-02-01
  • 打赏
  • 举报
回复
负数补码的求值是该数的绝对二进制数按位求反再加1,其中第一位为符号位(负数为1,正数为 0) ,所以:
138=10001010B,按位求反为 11110101,加1后为 11110110;我在 emu8086上转换得出 0FFFFFF76h,不知是不是这样?
asd605499941a 2012-02-01
  • 打赏
  • 举报
回复
我是这样理解的:
因为最高位为符号位
1为负,0为正
如果是8位的话
那么可以改动后7位数字
变化就有2^7次方种,可以表示2^7个数
2^7=128,当符号位为0,后面可以表示128个数,即(00000000~01111111)就是0到127
当符号位为1,后面也可以表示128个数,即(10000000~11111111)以为符号位为1的都是负数,所以他(10000000~11111111)表示-1~-128
138要表示他只能是用8位的二进制数,那么符号位就会和这个数的最高位产生冲突
所以我把他当做16位
为【00000000】【10001010】
-138为138全部取反+1
则是【11111111】【01110110】
以上纯属个人观点,仅供参考
net_friends 2012-02-01
  • 打赏
  • 举报
回复
负数补码=原码+0xffffff(具体位数根据实际位数来)+1
masmaster 2012-02-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 number_lock 的回复:]
引用 5 楼 masmaster 的回复:
零扩展用于无符号数,符号扩展用于补码数字,补码数字扩展的规则是添加最好有效位的值的副本。在机器中,有符号数用补码表示。


那是不是这样:136-138,就是对138进行符号扩展为-138,即对扩展的位全赋为1?
[/Quote]

-138在机器里用补码表示
138的二进制表示:10001010
他在机器里用补码表示,求反加一得到:
取反:
01110101
加一:
01110110 ;-138在机器里的补码表示
在机器里,减法操作a-b是通过a+(-b),即,a加b的补码,这里就是
136-138
=136+(-138)
=10001000+01110110
=11111110(FE)
=-1x2^7+1x2^6+1x2^5+1x2^4+1x2^3+1x2^2+1x2^1+0x2^0
=-128+64+32+16+8+4+2+0
=-128+126
=-2

大概就是这么一个过程。我现在在看《深入理解计算机系统》,那里讲的非常详细。特此推荐。
GSDN00A 2012-02-01
  • 打赏
  • 举报
回复
-138
1111111101110110
负数是正数的反码+1
number_lock 2012-02-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 masmaster 的回复:]
零扩展用于无符号数,符号扩展用于补码数字,补码数字扩展的规则是添加最好有效位的值的副本。在机器中,有符号数用补码表示。
[/Quote]

那是不是这样:136-138,就是对138进行符号扩展为-138,即对扩展的位全赋为1?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧