位模式

位模式它是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位的时候,这个数字串的取值范围是多少——在不同的解释方式下,以及当出现截断、扩展时所表示的数值间有什么关系,当然还有更深入的应用

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值