2009年8月5日星期三

负数和补码

学过计算机基础的人应该都知道计算机内部是把负数转换为补码处理的。几年前学习数电的时候,我还曾疑惑为什么要做这样的处理才能让数字电路“更简便地”理解负数运算,而后查了些资料才有所了解。
今天在 Reader 里看到阮一峰老师在他的 Blog 里介绍了《关于2的补码》的知识,说得很清楚易懂,想必看后就不用再到网上找其他的英文资料学习了。各位还不太清楚其中原因的同学可以来看看。
什么是2的补码?
它是一种数值的转换方法,要分二步完成:
第一步,每一个二进制位都取相反值,0变成1,1变成0。比如,00001000的相反值就是11110111。
第二步,将上一步得到的值加1。11110111就变成11111000。
所以,00001000的2的补码就是11111000。也就是说,-8在计算机(8位机)中就是用11111000表示。
《关于2的补码》原文地址在这里: http://www.ruanyifeng.com/blog/2009/08/twos_complement.html 。

此外,我还找到了看过的一本数电教材,Ronald C. Emery 所著的 Digital Circuits,其中的 Arithmetic with Binary Numbers 一节让我学到了不少东西。这本教材在 Google Books 上就可以找到足够详细的可读章节,请点击这里阅读