二进制负数的补码计算(二进制的负数补码运算)

http://www.itjxue.com  2023-02-22 21:29  来源:未知  点击次数: 

二进制补码怎么计算的

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表示“负”,而数值位,三种表示方法各不相同。

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

负数的补码怎么求 负数的补码计算方法

在计算机系统中,数值,一律采用补码表示和存储。

在计算机中,原码和反码,都是不存在的。

求补码,也用不着它们。

所以,原码和反码,根本就没有用!

------------------------

补码,其实,就是一个“代替负数做运算”的正数。

且看 2 位 10 进制数的运算:

 25 - 1 = 24

 25 + 99 = (一百) 24

你舍弃进位,只取两位,这两种算法,功能就完全相同。

那么,+99,就代替了-1。加法,也就代替了减法。

这不就是用正数(补数)代替了负数吗?

由负数求对应的补数,计算公式是: 补数 = 负数 + 10^n。

式中: n 是补数的位数。

 10^n 是 n 位 10 进制数的计数周期。

-------------------------

计算机用二进制,补数,就改称为:补码。

计算机所能计算的位数,是固定的,如八位机、16 位。。。

八位二进制是:0000 0000~1111 1111 (十进制 255)。

八位二进制的计数周期,是:2^8 = 256。

求负数补码的计算公式,也是: 负数 + 周期。

-1 补码就是:-1 + 256 = 255 = 1111 1111(二进制)。

-2 补码就是:-2 + 256 = 254 = 1111 1110(二进制)。

。。。

-128 补码就是:128 = 1000 0000(二进制)。

正数,必须直接参加运算,不许转换。

所以,正数不存在补码。

求补码,根本就不用“原码反码符号位取反加一”。

-------------------------

举例说明,用八位补码计算: 5 - 7 = -2。

 5? = 0000 0101

 -7 的补码= 1111 1001

--相加-------------

 得?  (1)? 1111 1110 = -2 的补码

舍弃进位,只保留八位,这就用加法,实现了 5-7。

二进制负数的补码

求二进制负数的补码的方法是:先求正数的补码,之后取反加一即可;而正数不变,正数的原码反码补码是一样的.

计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早

就指出的那样,今天十进制的广泛采用,只不过是我们绝大多数人生来具有10个手指头这个解剖学事实的结果。尽管在历史上手指计数(5,10进制)的实践要

比二或三进制计数出现的晚。".为了能方便的与二进制转换,就使用了十六进制(2

4)和八进制1.数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了

负数的补码怎么算?

正数的补码,是其本身。

负数的补码,就用它的正数,减一取反,即可得到补码。

如,+9 的二进制是:0000?1001。

下面求-9 的补码:

先减一:0000?1001?-?1?=?0000?1000;

再取反:1111?0111。

所以有:-9?补码?=?1111?0111。

简不简单?意不意外?

原码反码符号位,都是毫无用处的,不必关心。

(责任编辑:IT教学网)

更多

相关微软认证文章

推荐微软认证文章