注册 登录
编程论坛 汇编论坛

基础问题,各位大侠指教一下。

ymxu 发布于 2011-10-28 18:17, 949 次点击
本人刚学汇编,书上说 -127 的十进制,转为16进制为 81,127 十进制转为16时制为 7F,那么7×16+15=127没错,那么8×16+1=128,怎么不是等于 -127 呢?

还有一个是:设
X=-25=-19H=-0011001B
则x的8位补码表示为:[x]补=11100111B=E7H
则x的16位补码表示为:[x]补=1111111111100111B=FFF7H
上面的这两行中 E7H=14×16+7=231 怎么是等于-25呢?
FFF7H=15×16×16×16+15×16×16+15×16+7=61440+3840+240+7=65527 更不是等于-25了?

12 回复
#2
zklhp2011-10-28 22:33
第一个等不等于可以用windows带的计算器算 书上说的是对的

下一个 一个数用字节和字来存储 补码不同也正常罢 至于相等不相等呢 如果是汇编 这两个没法比 如果是C等高级语言呢 比较的时候会自动转换 所以在电脑里不会有这样的问题 只有你拿笔算的时候会不相等 确实不相等 因为没有这么比的。。

第一个肯定你要说 哎呀 我算的和书上不一样诶 我看出来了 你很认真 表现在用十进制把计算过程写出来了 可是诶 计算机里没有十进制 十进制只不过是帮助理解转换的 你既然怀疑算法我们来算一下

转补码 是取反 加一 但在补码里 最高位是符号位 所以其实你是把数转换为7位二进制(对于字节来说的) -127 127转2进制 0111 1111B 我补的那个0正好是最高位 取反 是什么 1000 0000B 然后 加1 1000 0001B 用16进制表示是81H 信服罢 然后是81H 取反加1 是取反的7位哦 0111 1111B 是127 符号位1 是负数 -127 转换来转换去都没错啊

要学会用二进制来思考问题 电脑里只有二进制 让你学汇编 你真正能用汇编写多少程序呢 其实还是学的二进制的思维 学的是计算机的工作方式 有个意识而已罢

祝学习顺利 有问题欢迎来讨论 唉 很多人来一次就走了 没意思。。
#3
insok2011-10-29 11:59
额,突然觉得版主是寂寞无奈的。。。虽然这个和汇编没什么关系。81写成二进制是1000 0001,这个应该是补码吧。(说实话,我也是新学,不很懂,所以。。。见谅啊)
那么反码应该是1000 0000,原码就是1111 1111,1+2+4+8+16+32+64=127,第一位符号位为1,所以是负。。。连起来大概就是 -127 了。
                                         (从2的零次方加到2的七次方)
#4
ymxu2011-10-30 07:57
那-128的补码是怎么算的?

128=64*2....0
64=32*2......0
32=16*2......0
16=8*2.......0
8=4*2........0
4=2*2........0
2=1*2........0
1..........1

上面是128的正值为10000000,那么取补码为:01111111+1=01111110
可书上是10000000?
#5
zklhp2011-10-30 09:27
以下是引用ymxu在2011-10-30 07:57:29的发言:

那-128的补码是怎么算的?

128=64*2....0
64=32*2......0
32=16*2......0
16=8*2.......0
8=4*2........0
4=2*2........0
2=1*2........0
1..........1

上面是128的正值为10000000,那么取补码为:01111111+1=01111110
可书上是10000000?

你用计算器算算是么。。
#6
ymxu2011-10-30 09:41
我先没用计算器算,因为看书上说:一上负数的补吗是:符号位不变,其它各位相反,最低位加1,所以就算了一下,就是这种结果了。而且用计算器算10000000的十进制也是128,而不是-128.
#7
zklhp2011-10-30 09:51
最低位加1 有进位

如果真像你说的那样 还得专门搞一种不进位的加法出来。。。
#8
ymxu2011-10-30 12:18
zklbp大哥,你能说说 -128 变补码的详细步骤吗?我从事的工作与电脑不相干,对于电脑底层的东西根本不懂,完全就是看书本,书上说的有时理解不了,有时说得太笼统,你跟我一步步的说一下,我就能举一反三了,谢谢。
#9
zklhp2011-10-30 17:38
我从事的工作与电脑不相干,对于电脑底层的东西根本不懂

其实我是搞医药工作的 你信么、、、、、
#10
zklhp2011-10-30 17:39
哦 顺便 windows自带的计数器是个好工具 功能强大哦。。
#11
insok2011-10-31 22:53
貌似补码中-128相当于-0,所以-128没有原码和反码。-128=-0=1000 0000
#12
insok2011-10-31 23:00
-0的原码=1000 0000,反码=1111 1111 加以以后=1 1000 0000,最高位溢出 应该是这样
#13
insok2011-11-01 11:49
额。昨天说错了。1111 1111+1=1 0000 0000。我问老师,他说-128=-0。-0的原码是1000 0000,而0的原码和补码反码一致,所以就是1000 0000。。。
1