十六进制数的减法问题
来源:互联网 发布:华为交换机端口应用acl 编辑:程序博客网 时间:2024/05/01 16:04
例如72H=0111 0010,35H=0011 0101,72H减35H等于多少,其中涉及到反码和补码,我不知道怎样计算,知道的请告诉我,越详细越好,若答得好,我追加20分,不懂勿答!
问题补充:
我补充一下,我所说的问题是如何在计算机汇编语言中实现,计算机只有加法没有减法,好象要用到反码和补码,我就是不知道怎么用.
答复 共 3 条
72-35=3D
回答者:sbdx - 二级 2007-11-22 17:58
其实你基本已经搞定了 只需要2进制相减 再转化为16进制
0111 0010
-0011 0101
——————
0011 1101
转化后为 3dH
回答者:当幸福来串门 - 一级 2007-11-22 18:00
如果只是手工相减,完全可以借鉴十进制数的减法,不用涉及反码补码之类的概念。唯一不同的是,十进制减法不够减时,上位借1下位加10,而十六进制则是上位借1下位加16。
例如72H减35H,2-5,不够减。上位借1作16,2-5就变成了16+2-5=13, 即D; 上位被借了1,所以就是6-3=3,因此结果是3DH.
如果用转换的方法,转换成二进制相减再转回十六进制,还不如转换成十进制相减再转回十六进制容易。
>计算机只有加法没有减法,好象要用到反码和补码.
负数用补码表示后,可以和正数一样来处理。这样,运算器里只需要一个加法器就可以了,不必再配一个减法器。
具体到所举的例子72H-35H, 用补码运算, 就是(72)[补码] + (-35)[补码]。
以8位机为例:
72H = 0111 0010, 正数的补码与原码相同,还是 01110010;
-35H = -0011 0101, 负数的补码是对反码加一。先逐位求反,得11001010, 加1得11001011;
01110010
11001011
----------+
00111101
注意相加的结果应该是100111101, 但在八位机里(8模系统)放不下9位数,只留后8位,所以结果就是00111101,即3DH.
当然相加的结果也是补码。现在最高位是0,所以结果是正数。如果高位为1,那就是负数,转回十进制时要特别注意。
- 十六进制数的减法问题
- 十六进制的减法
- 浮点数的减法运算
- unsigned无符号数减法问题
- 【Python】浮点数减法精度问题
- 无符号数减法溢出问题
- 背景减法面临的问题
- 背景减法面临的问题
- 超大数的十六进制转换
- java 十六进制数的转换
- 小于65536的数的十六进制数
- 八进制数和十六进制数的表示
- Pyhon float减法的非零问题
- 计算机中二进制减法的问题
- 十六进制的数字字符和十六进制数之间的转换
- 十六进制的字符串与十六进制数的转换
- 关于无符号数的减法为负值
- 将一个十六进制的数组转换成一个十六进制数
- ASP的字符串处理函数
- 数据库的索引,mysql中的索引|||如何在mysql中对text字段加索引?|||mysql数据库中的字段在什么情况下加索引?|||高手请进:text字段不能做索引,有无其他方法?|||该建那个字段
- Microsoft SQL Server之数据库存档
- 内核sem、wait_queue_head_t、timer和kernel_thread使用驱动范例
- c++程序处理过程
- 十六进制数的减法问题
- 动态数组C语言实现
- poj1125 Floyd-Warshall算法
- 编写整数字符串转化函数(不用itoa与atoi)
- 浅析sys_socket创建socket的简易流程
- ASCII码表在线查询(1.0 beta 1)
- 浅析ethx网卡发送函数sys_write简易流程
- 浅析ethx网卡控制函数ioctl实现具体流程
- ARM 7 用户模式下禁止/使能中断的一种方法--使用软中断 for Keil MDK