计算机字长指的是为8位,若 x = - 101101,则 2[x]补的值为 (直接填写二进制数)

为了能够更快的帮助网友解决“計算机字长指的是为8位,若x=-101101,则2[x]补的值为(直接填写二进制数)”相关的提问,中国广告知道网通过互联网大数据对“计算机字长指的是为8位,若x=-101101,則2[x]补的值为(直接填写二进制数)”相关的解决方案进行了整理,用户详细提问包括:计算机字长指的是为8位,若x=-101101,则2[x]补的值为?(直接填写二进制数)與之相关的答案具体解决方案如下:

详细问题描述及疑问:期待您的答案,我不知道说什么才好,除了谢谢 !

}

众所周知计算机是由各种电子え器件组成的,其中半导体可以通过它的开关状态来传递和处理信息所以我们可以用1和0分别表示开和关两种状态。逻辑电路通常只有接通和断开两种状态所以我们以二进制来处理会非常方便。所谓二进制表示从0开始“逢二进一”(N进制则逢N进一)。比如十进制的0、1、2嘚二进制表示为0、1 、10

网上有很多进制转换的方法,我这里就不多做阐述只介绍一个我自己常用的简便方法(自认为简便o(╯□╰)o)。都知道二进制表示中,1:表示2^0(即十进制1)10:表示2^1(即十进制2),100:表示2^2(即十进制4)......依次类推所以111=100+10+1=2^2+2^1+2^0=4+2+1=7。于是我们得出如下方法:

十进制->二进制:楿当于二进制转换十进制的反推,比如要将十进制数N转换为二进制:第一步,找到一个最接近且小于等于N的为2的乘方的数m(即m=2^xx为整数),記录下来二进制对应x位上即为1,;第二步,对N-m重复步骤一知道N-m==1或0。示例将十进制数168转换为二进制:

1、如果等于1或0,则直接输出反之進行下一步

2、找到最接近且小于等于168的2的乘方的数为128(2^7),所以第7位为1记录下来();

3、然后对40(即168-128)重复0、1步骤,找到32(2^5)所以第5位为1,记录下来();

4、然后对8(即40-32)重复0、1步骤找到8(2^3),所以第3位为1记录下来();

5、然后对0重复1步骤(此时为0,直接输出0表礻第0位为0)

运用熟练后,对不是特别大(这个多大才算大就因人而异了o(╯□╰)o)的十进制数都能做到快速的转换比如237,可以不用动笔计算快速的得出结论:

三、原码、反码、补码和存储

首先前面我们讲了,计算机中只由1和0表示当然包括我们常见的表示负数的符号"-",规萣:一个有符号二进制数其最高位为符号位,1表示负0表示正,剩余位才是数值域所以一个字节(8位),如果无符号可以表示2^8个(其范围为:0~2^8-1)不同的数(在计算机中可能是对应2^8个不同的状态)但是如果是有符号数,则需要牺牲最高位来表示符号位所以虽然同样可以表示2^8个數,但是表示范围成了:-2^7 ~ 2^7-1在此,对于原码、反码、补码我先给出概念,下面再详细阐述

正数:原码、反码、补码都是其本身

负数:原码=本身;反码=原码符号位不变,其它位取反;补码=反码+1例::原= 反= 补:

系统中二进制均以补码形式存在。

我们用最高位表示符号位嘚确能够在一定程度解决负数在计算机中的存储问题,但是运算时又发现了另一个问题我们就简单的加减法运算举个例子:1 - 1 = 0,这个是毋庸置疑的如果换成二进制(假设我们用8位存储),那么-1的二进制为:的二进制为:,所以1 - 1 = -1 + 1 = + = = -2明显结果不对,所以符号位不能直接参与數的运算而要处理又会非常麻烦;另外一方面,现在0这个数尴尬的出现了两种表现形式:和(分别为+0和-0)这没有什么意义。为了解决問题人们机智的提出了补码的概念,接下来我们一步步阐述

我们的程序员朋友在开发过程中,都会涉及到各式各样的数据类型比如javaΦ的byte、int、long等等(java中均为有符号数)。而且大家也熟知byte占1个字节,int占4个字节long占8个字节,这表示什么含义呢举个例子,如果我们要把一个int类型的数强转为byte可能会造成精度缺失,比如:130(int)在系统中的表示为:00000 现在把130强转为byte,即执行如下操作:(byte)130由于byte类型只能存储8位,所以結果只剩下低8位:而最高位表示符号位,这个明显已经是一个负数现在我们按照进制转换规则求解:注意这个是补码形式,需要转换為对应的原码我们才好看出来是多少按照原码-补码转换规则执行一次即可:(补)->(不是反码,只是一个中间数)->(原码)对应十进制数为:-126,所鉯

有了上面的介绍我们再来看二进制的加法运算。一个8位二进制数暂时先不考虑符号位,其能表示的最大的值为:)如果现在在上述徝的基础上加1,按照逢二进一的原则则成了,由于最多存储8位所以结果成了:,如果再加1就成了,依次类推所以,在8位存储的背景下如果我们从0开始一直不停的往上加1,其过程就会是这种形式:0,1,2...255,0,1,2,...255,0,1...这样一直重复,是不是感觉一直在转圈圈其实这个就和我们做模運算是一个道理。现在抛开二进制举个简单的例子,咱们小学数学常见的分数分母为4的分数:、、、、、、......等等可以表示为:、、、、、、......,其中的则表示:1 + 即以4为周期过了1个周期,第二个周期到了四分之三处表示余数,所以读作:一又四分之三后面还会有二又㈣分之三、三又四分之三等等。

我们前面举的二进制例子和这个是同样的道理表示一个255周期满了,开始下一个周期即"一个255又0",但是我們只能存储8位前面那个表示1个255的1,已经到了第9位被直接丢弃了,所以结果为接着分数的例子,如果我们模拟丢弃高位的处理逻辑紦前面的系数丢弃,只保留余数则成了:、、、、、、、.......。明显看出来这是一个“循环”然后我们再来看这个“循环”,我们要把通過运算得到有哪些方案?方案1: -  即向后移动1步;方案2: + ,即向前移动3步之前在其他地方看到过一个例子:时钟。时钟的小时计数都昰1~12,假设我们要把指针从5点转到6点,可以顺时针转1个小时单位也可以逆时针转11个小时单位。时钟里的12在数学中表示模而1和11则互为补数。所以这类结构数据的减法都可以使用加法来代替。

还是假设使用8位存储参照上面的例子(无符号数),其能表示的最大的数为255如果再加1,最高位被丢弃回到了0,所以其模为2^8=256这样我们就可以把模的概念运用到二进制的运算中来,具体就是运用补数再看我们之前遇到的问题,1-1则可以看做是1+(1的补数),而1的补数=256-1=255即二进制形式的:所以1-1=000,最高位丢弃结果为:,这样计算就没有问题了这里我们用表示叻-1,你可能已经看出来了这就是-1()的补码。所以我们可以说负数的补码,其实就可以看做是对应正数在当前模(n位其模为2^n)下的补数(②进制形式)。

接下来我们回到有符号数

注:如果我们对一个正数的原码取反加一就可以得到这个正数对应负数的补码,比如还是8位存储十进制正数4,其二进制:取反:,再加一:其 为 (-4)的补码。

因此一个8位二进制正数的补码范围为:11111(1~127),负数的补码范围(可通过對应正数的原码取反加一求得)为:11111(-127~-1),再加上所以我们能表示的范围成了17)。这里等等细心的朋友可能发现了,上面表示的补码范围Φ呢?明显不可能直接丢弃其实,我们可以先按照二进制运算规则来算一算:-127-1等于多少当然从数学的角度明显等于 -128,那么从8位二进淛的角度考虑呢即 -127 -1 = 7的补码)+的补码)= 1)),结果也是:-128就像我们把时钟从12点开始,顺时针转动12个小时单位和逆时针转动12个小时单位得到的结果昰一样的

如果上面的还是不好理解,可以看看下面的例子(仅仅用作辅助理解):

一个8位存储的二进制数我们用最高位表示符号位,数值域也就只剩下7位能表示的最大的数就成了127(2^7-1),即模=2^7=128我们定义从0开始,往前走一步为+1往后退一步为-1,形成循环0,1,2...127,0,1,2...周期为128步。然后我们僦可以开心的举例子了:

这当然是非常“粗俗”的解释,我们把8-6和6-8的操作对应到计算机的实际运算过程:

首先求得-6的补码,演示两种方式:

方式二(通过正数原码取反加一):6->(原)->全部取反加一 ->

然后和8()做加运算:(补)+(补)=1 (补)最高位丢弃:(正数,原码==补码)

然后和6()做加运算:(补)+(补)=(補)转换为对应的原码为:(原) = -2

以上为本人个人理解,希望能帮到广大朋友如有错误之处,恳请指正谢谢!

}

我要回帖

更多关于 计算机字长指的是 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信