鱼C论坛

 找回密码
 立即注册
查看: 3071|回复: 4

始终分不清有符号数和无符号数运算的结果。

[复制链接]
发表于 2011-11-17 17:58:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼的教程中说的很清楚,一个数可以作为有符号数和无符号数来看待。例如add ax,bx 那么在这个运算的过程中就会产生两个结果,一个是有符号运算的结果,一个是无符号数的结果。那么到底取哪个值作为这个运算的结果呢?假如这个代码的下一句是jmp跳转(只是假如,有悖常理的话请勿见怪),ax中的值决定了长度和方向,那么如果取正数,就会是向下跳,如果取负数,就会往上跳,那到底取决于哪个值?谢谢大家。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-17 18:26:36 | 显示全部楼层
没错,是分有符号和无符号数,但默认下是有符号的.比如正像你说的jmp,跳转根据偏移量来决定,比如段内短转移,在-128到+127的范围,负的向上跳,反之向下,这个范围怎么来的,就是根据8位位移量得到的,8位寄存器有符号数的表示范围就是-128到+127,如果表示无符号数的话,那么范围就是0--255
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-17 19:41:46 | 显示全部楼层
我想我这个贴子可以回答你的问题,我之前有过同样的疑惑。
http://bbs.fishc.com/forum.php?mod=viewthread&tid=4675
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-18 08:54:04 | 显示全部楼层

我觉得我自己有点明白了。
因为CPU是默认选择是有符号运算的,那么他有一个数他就会自动检测。比如8位的便宜为-128~127.那么首先检测这个数是否为超过了127,如果超过了就按照负数算,如果没超过就按正数算。
比如80H这个值,用无符号数表示是128,用有符号数表示为-128.因为8位便宜变量为-128~127,所以会选择有符号数。
比如FF82H这个字型数据,用无符号数表示是65410,用有符号数表示是-126,因为16位便宜变量为-32768~32767,所以会直接选择有符号数。
不知道我这么想的对不对呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-18 08:54:55 | 显示全部楼层
Mr.C 发表于 2011-11-17 19:41
我想我这个贴子可以回答你的问题,我之前有过同样的疑惑。
http://bbs.fishc.com/forum.php?mod=viewthrea ...

我觉得我自己有点明白了。
因为CPU是默认选择是有符号运算的,那么他有一个数他就会自动检测。比如8位的便宜为-128~127.那么首先检测这个数是否为超过了127,如果超过了就按照负数算,如果没超过就按正数算。
比如80H这个值,用无符号数表示是128,用有符号数表示为-128.因为8位便宜变量为-128~127,所以会选择有符号数。
比如FF82H这个字型数据,用无符号数表示是65410,用有符号数表示是-126,因为16位便宜变量为-32768~32767,所以会直接选择有符号数。
不知道我这么想的对不对呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 10:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表