. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  基础知识2【补码知识分享】  [待解决] 回复[ 3次 ]   点击[ 405次 ]  
zhenglxd
[帖 主]   [ 发表时间:2009-05-11 16:06 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
以后的课程可能会涉及到这个知识所以在这里给大家讲解下,我只知道公式具体的算法我不明白。但通过例题相信大家都很快会搞懂

在计算机系统中,数值一律用补码来表示(存储)
(1)正数的补码:与原码相同。
  例如,+9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
 例如 -9 的补码是1 111 0110+1
              =1 111 0111
根据补码求原码:
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
  (2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取
  反,然后再整个数加1。 

例1: 9-8
9-8  实质等于 9+ (-8)  计算机中所有的减法都作加法

9 是正数他的补码是他本身 0000 1001
-8是负数 最高位取1 其他位取8的绝对值的按位逆反(就是每一位相反) +1
8 的二进制表示是 0001000 按位逆反= 1110111  再+1= 1111000 再 加最高位1 
那么-8 表示为1 1111000
9+-8=      0000 1001  (+)
           1111 1000
    =     1000000001 因为最高位超过 8位(一内存单元可存储的容量所以被舍弃)
最终=      000000001 再因为最高为是1 是正数9(正数的补码等于他本身) 所以 结果=1

例二: 7-9 实质等于 7+(-9)
7为正数 补码为  0000 0111     
-9为负数 补码为 1111 0111
相加=    11111110 因为最高位为一所以是负数 除最高位其余为按位反转=10000001 再+1= 100000010(最高位1代表他是负数)所以   = -2
这些东西全手打 写出来既是帮助大家 也是把自己曾经学过 却有些以往的东西再巩固一遍
只要我有时间我会多写些 这类对入门者有帮助的东西!
hnlwz
[第1楼]   [ 回复时间:2009-05-21 09:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-08 17:16
学习了。
  呵呵。貌似很复杂的。
kamjia
[第2楼]   [ 回复时间:2009-05-25 21:25 ]   [引用]   [回复]   [ top ] 
荣誉值:1
信誉值:2
注册日期:2009-05-25 18:12
帮楼主顶一下。写得很好。
dong_xiao_long
[第3楼]   [ 回复时间:2009-06-03 09:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-14 10:18
我记住了,负数符号位不变,其余取反加一,正数补码为其本身!
谢谢分享!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved