我是靠谱客的博主 平常刺猬,最近开发中收集的这篇文章主要介绍位模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

转载于:https://www.cnblogs.com/lanboy/p/5812252.html

最后

以上就是平常刺猬为你收集整理的位模式的全部内容,希望文章能够帮你解决位模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部