正数的补码应该是什么
补码范畴?
正数的补码是什么?
八位二进制正数的补码范畴是0000 0000 ~ 0111 1111 即0 ~ 127,负值的补码范畴是正数的原码0000 0000 ~ 0111 1111 取反加一(也可以理解为负值1000 0000 ~ 1111 1111化作反码结尾再加一)。
因此获得 1 0000 0000 ~ 1000 0001,1000 0001做为补码,其原码是1111 1111(-127),先后向前推,可获得-1的补码为1111 1111,那样补码0000 0000的原码是1000 0000符号位与此同时还可以看作数据位即表明-128,这也解释了为何127(0111 1111) 1(0000 0001)=-128(1000 0000)。
在计算机中数据信息用补码表明,运用补码统一了符号位与标值位的计算,与此同时解决了 0、-0难题,将空出去的二进制原码1000 0000表明为-128,这也合乎本身逻辑性实际意义的完好性。因而八位二进制数表明范畴为-128~ 127。
二进制形变补码测算?
1、正数的补码表明:
正数的补码 = 原码
负值的补码 = {原码符号位不会改变} {标值位按位取反后 1} or
= {原码符号位不会改变} {标值位从右侧数第一个1以及右侧的0保持一致,左侧安位取反}
以十进制整数 97和-97为例子:
97原码 = 0110_0001b
97补码 = 0110_0001b
-97原码 = 1110_0001b
-97补码 = 1001_1111b
2、纯小数的原码:
纯小数的原码如何得到呢?办法有许多,在这儿给予一种比较有利于笔算的方式。
以0.64为例子,根据查看得知其原码为0.1010_0011_1101_0111b。
操作步骤:
将0.64 * 2^n 获得X,在其中n为预保存的小数点后个数(即觉得n为小数以后的小数不重要),X为乘法结论的整数部分。
这里将n取16,得
X = 41943d = 1010_0011_1101_0111b
即0.64的二进制表明在偏移了16位后为1010_0011_1101_0111b,因而能够觉得0.64d = 0.1010_0011_1101_0111b 与查询记录一致。
再试验n取12,得
X = 2621d = 1010_0011_1101b 即 0.64d = 0.1010_0011_1101b,在忽视12位小数以后的个数情况下,数值同样。
3、纯小数的补码:
纯小数的补码遵照的规则是:在获得小数的源代码后,小数点前1位表明标记,从最少(右)位起,寻找第一个“1”照写,以后“见1写0,见0写1”。
以-0.64为例子,其原码为1.1010_0011_1101_0111b
则补码为:1.0101_1100_0010_1001b
自然在硬件配置语言表达如verilog中二进制表明时不太可能含有小数点(实际上不清楚哪儿可以带小数点)。
4、一般带小数的补码
一般来说这样的事情下先变为整数金额计算比较方便
-97.64为例子,经查看其原码为1110_0001.1010_0011_1101_0111b
笔算全过程:
-97.64 * 2^16 = -6398935 = 1110_0001_1010_0011_1101_0111b,在其中小数点在右数第16位,与查询记录一致。
则其补码为1001_1110_0101_1100_0010_1001b,在这里选用 负值的补码 = {原码符号位不会改变} {标值位按位取反后