论文部分内容阅读
摘 要:十六进制数的运算一直离不开二进制数,但是在很多情况下,十六进制数化为二进制数总是使得计算变得繁琐和枯燥。简化十六进制数的计算,使得它能够简单明了,不再进行机械的二进制与十六进制数的转换,提高了计算的效率。
关键词:十六进制;二进制;补码;简化
中图分类号:O13 文献标识码:A文章编号:1009-0118(2010)-07-0004-01
在离散数学与计算机的很多学科中,补码的计算是被经常用到的。一直以来对于补码的运算都遵循着如下原则:
步骤一:凡非二进制数则化为二进制数;
步骤二:将所化二进制数的补码算出;
步骤三:把计算出的补码再化为原数制。
这样的计算在单独处理数据且数据量不是很大的情况下是可以的,但是补码的计算在很多情况下仅仅是诸多计算步骤中的一步,且当数据量较大时,按上述方式进行计算是很费时费力的。比如在汇编语言的学习中,常常要通过计算来理解指令,这时我们需要的是计算结果,而不希望在计算过程中花费较多的精力和时间,那么有没有办法使得这种计算变得简单易行呢?
我们先来考虑这样一个例子:
SUBDH,[BP+4]
执行前(DH)=41H,(SS)=0000H,(BP)=00E4H,(000E8) = 5AH
执行后 (DH)=?
这个例子里我们需要找到DH的值,按照上述的方法计算如下:(DH)=41H-5AH
二进制中的减法是要把减数的补码算出来,而后代替减数做加法运算的(在计算机中也是如此运算的):
补码=10100110
从而得到:
又 11100111(D)=0E7(H)
从而41(H)-5A(H)=0E7(H)
从上例中可以看出,整个计算的过程中减法的运算并不难,但是有关补码的运算却占去了大部分的计算时间。在计算机中使用的二进制数学,所有的负数都是用补码来表示的,在日常学习中则是使用十六进制来学习计算机中的相关知识,从而十六进制补码的运算是会经常用到的。下面来看一下如何简化补码的运算来达到简化计算的目的:
观察上例中的补码运算的过程:
由于在计算机中补码从而有=0101 1010 10100101 10100110
最终得到的表达形式为10100110 。
通过上述过程我们发现这样的规律:
0101 1010 + 1010 0101 = 11111111
换成十六进制来看:
5A + A5 = FF
其中5A与A5互为反码!每4位相加后结果都是F ,换成十六进制数则是对应位的两个数相加结果是F!由此可知求反码可以通过如下形式进行:
[5A(H)] 反码=(F5)(FA)=A5
再将上式带入求补码的运算中得到:
[5A(H)] 补码=[5A(H)] 反码+1=(F5)(FA)+1=A5+1=A6
在上式中划横线的部分,由于每一位都在进行减法运算所以不会产生进位,上式可以改为:
[5A(H)] 补码=[5A(H)] 反码+1=(F5)(FA+1)=A6
或 [5A(H)] 补码=[5A(H)] 反码+1=(F5)(16A)=A6
在这个简单的例子中我们看到,十六进制数求补码时除了最后一位要考虑到加 是否有进位外,其余的每一位都只是进行了求补运算。我们上面得到的方法推而广之:
[] 补码=()()()()
或 [] 补码=()()()()
这种方法十分灵活,在进行四则运算时无论是先求补码还是后求补码都可以得到相同的答案。以加法为例,如要计算(-5A)+3C 在计算机中表达:
1、先求补码再算加法: 2、先算加法后求补: (5A)+3C(5A)+3C
综上所述,利用任意两个互为反码的十六进制数相加得的结论,可以大大的进化十六进制补码的运算,从而提高学习的效率。
参考文献:
[1]周德明.微型计算机系统原理及应用(第五版)[M].北京:清华大学出版社,2007.
[2]沈美明,温冬婵.IBM-PC汇编语言程序设计(第二版)[M].北京:清华大学出版社,2001.
[3]左孝凌.离散数学[M].上海:上海科学技术文献出版社,1982.
关键词:十六进制;二进制;补码;简化
中图分类号:O13 文献标识码:A文章编号:1009-0118(2010)-07-0004-01
在离散数学与计算机的很多学科中,补码的计算是被经常用到的。一直以来对于补码的运算都遵循着如下原则:
步骤一:凡非二进制数则化为二进制数;
步骤二:将所化二进制数的补码算出;
步骤三:把计算出的补码再化为原数制。
这样的计算在单独处理数据且数据量不是很大的情况下是可以的,但是补码的计算在很多情况下仅仅是诸多计算步骤中的一步,且当数据量较大时,按上述方式进行计算是很费时费力的。比如在汇编语言的学习中,常常要通过计算来理解指令,这时我们需要的是计算结果,而不希望在计算过程中花费较多的精力和时间,那么有没有办法使得这种计算变得简单易行呢?
我们先来考虑这样一个例子:
SUBDH,[BP+4]
执行前(DH)=41H,(SS)=0000H,(BP)=00E4H,(000E8) = 5AH
执行后 (DH)=?
这个例子里我们需要找到DH的值,按照上述的方法计算如下:(DH)=41H-5AH
二进制中的减法是要把减数的补码算出来,而后代替减数做加法运算的(在计算机中也是如此运算的):
补码=10100110
从而得到:
又 11100111(D)=0E7(H)
从而41(H)-5A(H)=0E7(H)
从上例中可以看出,整个计算的过程中减法的运算并不难,但是有关补码的运算却占去了大部分的计算时间。在计算机中使用的二进制数学,所有的负数都是用补码来表示的,在日常学习中则是使用十六进制来学习计算机中的相关知识,从而十六进制补码的运算是会经常用到的。下面来看一下如何简化补码的运算来达到简化计算的目的:
观察上例中的补码运算的过程:
由于在计算机中补码从而有=0101 1010 10100101 10100110
最终得到的表达形式为10100110 。
通过上述过程我们发现这样的规律:
0101 1010 + 1010 0101 = 11111111
换成十六进制来看:
5A + A5 = FF
其中5A与A5互为反码!每4位相加后结果都是F ,换成十六进制数则是对应位的两个数相加结果是F!由此可知求反码可以通过如下形式进行:
[5A(H)] 反码=(F5)(FA)=A5
再将上式带入求补码的运算中得到:
[5A(H)] 补码=[5A(H)] 反码+1=(F5)(FA)+1=A5+1=A6
在上式中划横线的部分,由于每一位都在进行减法运算所以不会产生进位,上式可以改为:
[5A(H)] 补码=[5A(H)] 反码+1=(F5)(FA+1)=A6
或 [5A(H)] 补码=[5A(H)] 反码+1=(F5)(16A)=A6
在这个简单的例子中我们看到,十六进制数求补码时除了最后一位要考虑到加 是否有进位外,其余的每一位都只是进行了求补运算。我们上面得到的方法推而广之:
[] 补码=()()()()
或 [] 补码=()()()()
这种方法十分灵活,在进行四则运算时无论是先求补码还是后求补码都可以得到相同的答案。以加法为例,如要计算(-5A)+3C 在计算机中表达:
1、先求补码再算加法: 2、先算加法后求补: (5A)+3C(5A)+3C
综上所述,利用任意两个互为反码的十六进制数相加得的结论,可以大大的进化十六进制补码的运算,从而提高学习的效率。
参考文献:
[1]周德明.微型计算机系统原理及应用(第五版)[M].北京:清华大学出版社,2007.
[2]沈美明,温冬婵.IBM-PC汇编语言程序设计(第二版)[M].北京:清华大学出版社,2001.
[3]左孝凌.离散数学[M].上海:上海科学技术文献出版社,1982.