首页 > 代码库 > 位模式
位模式
位模式它是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个权都是正的。然后就是跟原码一样的东西:把每位的值与权相乘,最后把乘积求和即是此二进制位模式所代表的数值。因此,对于1000‘0000的补码的解释是:1x(-2^7)+0x2^6+0x2^5+.....+0x2^0=-2^7=-128。 可以看到,这种解释比什么取反加1来得直接,而且不会有什么“取反加1后还是1000‘0000”或者“-128应该是特殊规定的,就是用1000‘0000表示的”等等之类的乱七八糟的问题了。而且更好的是,从这里我们可以方便地计算出在w位的时候,这个数字串的取值范围是多少——在不同的解释方式下,以及当出现截断、扩展时所表示的数值间有什么关系,当然还有更深入的应用
位模式