. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  有关负数在计算机的表示,有点疑惑  [待解决] 回复[ 3次 ]   点击[ 399次 ]  
shawyi
[帖 主]   [ 发表时间:2010-10-29 15:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-27 15:29
我们知道,为了方便在计算机运算,实现符号位也能直接参与运算,引入补码来表示负数。
那现在有一个问题,计算机是如何识别内存单元中的这个数是有符号数还是无符号数。
比如 al中现在的内容是 10001000,此刻表示-78h,还是表示88h?
还是这个需要程序员定义?
masmaster
[第1楼]   [ 回复时间:2010-10-29 15:44 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
负数, 以补码的形式存在于内存中,正数,以原码的方式存在于内存中, 例如你可以在程序里定义两个数据:+1和-1,则+1在内存中以01的形式存在,-1则以FF的形式存在。至于是否作为有无符号数使用, 则取决于程序员的指令,如果有符号比较, 那么就用jl,jg,等等,如果作为无符号使用, 那么久用ja,jb,等等
shawyi
[第2楼]   [ 回复时间:2010-10-29 16:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-27 15:29
那也是说上面的例子 al中的内容不能单纯的认定是负数和正数了,取决于程序的定义了
goodxiaowan
[第3楼]   [ 回复时间:2010-12-11 08:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-05-23 12:24
首先,你要知道定义是多少位,比如8086cpu寄存器使用16位,那最高位(第15位)为符号位
0、1分别表示正、负!
一个正数的补码是本身,一个负数的补码是这个数的绝对值的二进制形式取反再加一,
比如:(在8位)-15, 我们先去绝对值为15,再转为二进制形式00001111————(取反+1)=11110000+1=11110001
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved