汇编网首页登录博客注册
scuzg的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
友情链接

[2010-07-02 09:38] 怎样“区分”带符号数和无符号数?

初学的朋友往往会问怎样“区分”无符号数和带符号数,其实两者在形式上是没有区别的,区别就在你的心里:如果你将某二进制数的最高位视为符号位,就是带符号数;如果将其看作是一个有效数位而不是符号位,则为无符号数。
    比如0fdh,如果将最高位视为有效数位,则0fdh就是无符号数,即253;如果最高位视为符号位,它就是一个带符号数,并且是个负数;而在计算机内部,负数都用补码表示,所以将0fdh看作负数时,它就是某个负数的补码: 
    0fdh=11111101b 
将其按数值位“各位取反、末位加1”的法则转换成原码则是: 
    10000011b 
这就是0fdh的原码-3。 
    又如:  
      03h  
    看成无符号数和带符号数都是 3,但无符号数的最高位是数值位,可以接收来自低位的进位或直接记录数值,而带符号数的最高位用于表示符号,不能接收来自数值位的进位或记录数值,如果计算时数字位向最高位进位,就超出了带符号数的表示范围,发生溢出了。
    当 CPU 处理一个二进制数时,其实也弄不清楚这个数是有符号还是无符号数;由于引入了补码,使得加减计算的指令对有符号数和无符号数的处理是一样的,所以在进行加减运算时, CPU 将运算结果作为有符号数和无符号数对符号位的影响都“罗列”出来了,供编程者根据需要使用。
评论次数(7)  |  浏览次数(1843)  |  类型(汇编语言) |  收藏此文  | 

[  游客   发表于  2010-07-05 18:52  ]

恩。非常有道理。
顶。。

[  thedaydreamwang   发表于  2010-07-08 03:03  ]

有空把单精度的表示方法给我们讲下谢谢了!!感觉百度写的很不详细!!好久不见了哈!!

[  游客   发表于  2010-11-07 20:24  ]

张老师,大神啊!

[  nbaqqqq   发表于  2011-04-07 18:12  ]

大概懂了,谢谢张老师。

[  ameteur   发表于  2011-10-09 17:28  ]

楼上,感谢你让我知道博主是一位老师.
我是一名业余爱好者,刚学汇编不久,以前学过两天VB,但由于网上的VB视频教程停止更新,也没有学到什么样,希望张老师能给我个学习意见.

[  游客   发表于  2011-12-17 23:08  ]

请问0fdh为什么不是0000 1111 1101 b ?如果最高位视为符号位,它就是一个带符号数,并且是个负数,最高位不是0?难道符号位都是 7、15、23...来判断?

[  scuzg   发表于  2011-12-29 15:42  ]

表示8位二进制数的16进制数fdh,因高位是f,所以前面前缀0以区别于标识符,也就是说,当对应8位二进制数的16进制数高位数a~f时,都须前缀0。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码