什么是位模式

来源:百度知道 编辑:UC知道 时间:2024/06/09 12:32:35

关于这个问题,我所见过的最好的解释在《深入理解计算机系统》,原著名称是“Computer Systems A Programmer's Perspective”,作者是2位美国大学的教授:Randal E.Bryant和Davia O'Hallaron,这个书名是中译本的名字,由龚奕利、雷迎春2位翻译,当当网上有卖的,我才买了个把月。虽然中译本在网上有人说不怎么样,但我个人觉得这本书是让所有C语言爱好者从操作系统的角度深入了解C语言运作细节的好书。废话不多说了,下面我就把这本书里对原码和补码的解释抄过来,看完它你可以把之前学的原码和补码的概念扔掉了。什么取反再加1的,其实如果你看过我说的这本书,你就知道它是C语言中用来执行二进制补码非的一种方法,而不是用来把补码转换成原码的。 1、位模式:计算机中所有二进制的0、1代码所组成的数字串。比如8位的二进制数1000'0000,这个数按补码来解释就代表十进制数-128,而按原码来解释则代表128。原因?往下看。 PS:其实不论是什么进制的数字串都是可以视为此进制的一种位模式。 2、位模式的权:在位模式中,从右向左每位有一个固定的权值,相邻位之间权是一个固定的比例关系。说白了,每个位的权是以进制为底,与每位的序号有关的幂——序号从右向左,由0号开始编。 以十进制为例数101为例,个位的权是10的0次幂,即是1;十位的权是10的1次幂,即是10;百位则是10的2次幂即100,以后的类推就是了。 具体到二进制来说,位模式中各位的权从右向左依次是2的0、1、2、3...........的幂。强调一下,编号的方向是右到左的。 3、位模式的数学解释: 原码:所有位的权是正的,即是直接的2的0、1、2、3......的幂,然后把每位的值与权相乘,最后把乘积求和即是此二进制位模式所代表的数值。因此,对1000'0000按原码来解释是这样的:1x2的7次幂+0x2的6次幂+......+0x2的0次幂=128。如果全部8个位都是1,那么就是1x2的7次幂+1x2的6次幂+......+1x2的0次幂=2的8次幂-1=256-1=255。 补码:最左一位的权是负的,其它是正的。比如一共w位,则最左一位是-2^(w-1)〔呃,这个式子表示负的2的w-1次幂,是个负数的值。〕,然后余下的w-1个权都是正的。然