您的位置 首页 > 科技

补码运算规则 补码怎么算?

补码运算规则

补码运算规则 补码怎么算?

反码补码运算规则?

补码怎么算?

原码,反码,补码及其运算

1)简述

原码: 用来转换对应进制.

反码: 二进制码0变1,1变0叫做反码,反码用于原码补码之间的转换.(符号位不变)。

补码: 用来做数据的存储运算. 补码提出的根源是让计算机底层的实现减法操作(可以表达出一个数的正负)。

2)运算规则

(原码 反码 补码之间的转换 , 符号位不要动)

正数: 原码 = 反码 = 补码

负数: 原码 = 补码取反加1 给补码求原码

负数: 补码 = 原码取反加1 给原码求补码

补码怎么算?

补码中第一位是符号位,只有剩下的七位是数值位,即

数值位全为 1 时,最大值为 -27 - 1 ,即 -127;如果再加 1 就会发生溢出变成 1000 0000。

在补码中只有一个 0 ,即 0000 0000, 0;而 -0 ,1000 0000 在补码中规定用来表示 -128,也就是补码中的一种 数码结合 形式,符号位也表示数值位。

上面只是说规定 1000 0000 表示 -128,那么, -128 的补码可以通过计算出来吗?

答案是可以的,我们可以通过无符号数来计算出补码(无符号数的补码原码和反码都是一样的)。

有符号数可以通过模运算来获得对应的无符号数(n 位二进制数的模为 2n,即 8 位二进制数的模为 256):

当 0lt= x lt= 27 时,x无 = x

当 -27 lt= x lt 0 时,x无 = x 28

补码怎么算?

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,在此采用 负数的补码 = {原码符号位不变} {数值位按位取反后 1} 方法

5、补码得到原码:

方法:符号位不动,幅度值取反 1 or符号位不动,幅度值-1取反

-97.64补码 = 1001_1110(.)0101_1100_0010_1001b

取反 = 1110_0001(.)1010_0011_1101_0110b

1 = 1110_0001(.)1010_0011_1101_0111b 与查询结果一致

6、补码的拓展:

在运算时必要时要对二进制补码进行数位拓展,此时应将符号位向前拓展。

-5补码 = 4'b1011 = 6'b11_1011

ps.原码的拓展是将符号位提到最前面,然后在拓展位上部0.

-5原码 = 4‘b’1101 = 6'b10_0101,对其求补码得6'b11_1011,与上文一致。

扩展资料:

计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

相关文章