导航:首页 > 源码编译 > 73二进制补码运算法则

73二进制补码运算法则

发布时间:2022-04-22 15:20:27

㈠ 如图是87-(-73)的二进制补码运算,可是最高位没法借位了,请问该怎么办呢

最高位不够减,“照借不误”。

实际上要计算机内,加法有加法器实现,减法是转换成补码的加法(加上减数的相反数)来运算的。

㈡ 十进制的-73的补码是多少

先说73,十进制的73转为二进制:(73)10=64+8+1=2^6+2^3+2^0=(1001001)2,这里数一下二进制7位,正数的符号位是0,用8位表示的话,所以加上符号位后73的原码=01001001,正数的反码,补码都和原码一样,所以都是01001001....

计算机中的负数是以其补码形式存在的 补码=原码取反+1,也就是10110111

㈢ 二进制补码怎么计算的

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、补码得到原码:

方法:符号位不动,幅度值取反+1or符号位不动,幅度值-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,与上文一致。

(3)73二进制补码运算法则扩展阅读:

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

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

㈣ 二进制数反码和补码的算法

计算机里的二进制数有八位、十六位等,下面以八位为例
19的二进制数为:0001
0011
那么+19
原码为
0001
0011
反码为
0001
0011
补码为
0001
0011
那么-19
原码为
1001
0011
(左边第一位表示正负数,正数为0,负数为1)
反码为
1110
1100
补码为
1110
1101

㈤ 补码运算规则是什么

对于正数,原码反码补码都是一样的,对于负数,不看符号位对于剩下求反。

就是把0变成1把1变成0,就是求反了,求反后+1再添上符号位.就得到了补码,注意这里符号位是不参与取反与+1的10000001

首位(符号位)是1,这个数位负数。

取反:11111110加1

11111111结果为-127

(5)73二进制补码运算法则扩展阅读:

正数

正整数的补码是其二进制表示,与原码相同。

例:+9的补码是00001001。(备注:这个+9的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。)

㈥ 87+(-73)表示成二进制补码,然后按补码进行运算,麻烦帮我这下过程,看看结果是否溢出

若字长8位,则:
[-73]原 =11001001b
[-73]反 =10110110b
.
[-73]补 =10110111b
[87]补 =01010111b (+
------------------------------
[87-73]补=00001110b 最高位(符号位)进位自然丢失
结果 87+(-73) =+1110b =+14d
Cs⊕Cp = 1⊕1 = 0 无溢出,
(Cs是符号位的进位,Cp是最高数值位的进位,⊕表示异或)

㈦ 二进制补码怎么算

数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自<<数学发展史>>有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题.

数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为

(-127~-0 +0~127)共256个.

? 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits

( 1 )?10-? ( 1 )10?=? ( 1 )10?+ ( -1 )10?= ?( 0 )10

(00000001)原?+ (10000001)原?= (10000010)原?= ( -2 )?显然不正确.

? 因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:

?( 1 )10?-? ( 1 )?10=? ( 1 )?10+ ( -1 )?10= ?( 0 )10

?(00000001)?反+ (11111110)反?=? (11111111)反?=? ( -0 ) ?有问题.

( 1 )10?-? ( 2)10?=? ( 1 )10?+ ( -2 )10?= ?( -1 )10

(00000001)?反+ (11111101)反?=? (11111110)反?=? ( -1 )?正确

问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).

于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:

(-128~0~127)共256个.

注意:(-128)没有相对应的原码和反码, (-128) = (10000000) ?补码的加减运算如下:

( 1 )?10-? ( 1 )?10=? ( 1 )10?+ ( -1 )10?= ?( 0 )10

(00000001)补?+ (11111111)补?=? (00000000)补?= ( 0 )?正确

( 1 )?10-? ( 2)?10=? ( 1 )10?+ ( -2 )10?= ?( -1 )10

(00000001)?补+ (11111110)?补=? (11111111)补?= ( -1 ) ?正确

?? 所以补码的设计目的是:

???? ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.

⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

? 所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。看了上面这些大家应该对原码、反码、补码有了新的认识了吧!

㈧ 如何理解二进制原码,反码,补码,二进制补码运算

带符号数,有三种表示方法,即:原码、反码和补码。

但是,在计算机系统中,数值一律用【补码】来表示和存储。

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

使用补码的意义:可以把减法或负数,转换为加法运算。

因此,就能简化计算机的硬件。

=====================

补码的概念,来自于:补数。

比如钟表,时针转一圈,周期是 12 小时。

那么,倒拨 3 小时,可以用正拨 9 小时代替。

9,就是-3 的补数。计算方法:9 = 12-3。

同理,分针倒拨 X 分,可以用正拨(60-X)代替。

60,是分针的周期。

懂得三角函数的同学,都知道,三角函数的周期是 2π。

那么,在-π/2+3π/2 处的函数值是相同的,可互换。

算法是:+3π/2 =2π - π/2。

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

当你使用两位十进制数:0~99,周期就是 一百。

那么,减一,就可以用 +99 代替。

24-1 = 23

24 + 99 = (1) 23

舍弃进位,这两种算法,功能就是相同的。

于是,99 就是 -1 的补数。

计算:补数 = 周期 + 负数

对于其它负数,自己去求补数吧。

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

计算机中使用二进制,补数,就改称为【补码】。

八位二进制是:0000 0000~1111 1111。

相当于十进制:0~255,周期就是 256。

那么,-1,就可以用 255 = 1111 1111 代替。

所以:-1 的补码,就是 1111 1111 = 255。

同理:-2 的补码,就是 1111 1110 = 254。

继续:-3 的补码,就是 1111 1101 = 253。

。。。

最后:-128 的补码,就是 1000 0000 = 128。

负数补码的计算公式:【 256 + 这个负数 】。

(式中的 256 = 2^8,是八位二进制的周期。)

正数,并不存在补码的问题。

所以,正数,并没有补码,可以直接运算。

(也有人乱说:正数本身就是补码。)

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

求解算式:7-3 = 4。

计算机中,并没有减法器,必须改用补码相加。

列竖式如下:

7 的补码=0000 0111

-3的补码=1111 1101

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

得:(1)0000 0100= 4 的补码

舍弃进位,只保留八位,结果完全正确。

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

借助于补码,可以简化计算机的硬件。

原码和反码,都没有这种功能。

所以,在计算机中,根本就没有原码和反码。

它们都是什么?就不用关心了。

㈨ 二进制补码运算法则是什么

正数的补码=原码

负数的补码={原码符号位不变}+{数值位按位取反后+1} or

= {原码符号位不变}+{数值位从右边数第一个1及其右边的0保持不变,左边安位取反}

以十进制整数+97和-97为例:

+97原码=0110_0001b

+97补码=0110_0001b

-97原码=1110_0001b

-97补码=1001_1111b



(9)73二进制补码运算法则扩展阅读

意义

1、解决了符号的表示的问题;

2、可以将减法运算转化为补码的加法运算来实现,克服了原码加减法运算繁杂的弊端,可有效简化运算器的设计;

3、在计算机中,利用电子器件的特点实现补码和真值、原码之间的相互转换,非常容易;

4、补码表示统一了符号位和数值位,使得符号位可以和数值位一起直接参与运算,这也为后面设计乘法器除法器等运算器件提供了极大的方便。

㈩ 二进制补码运算溢出判断

补码运算的溢出判别方式为双高位判别法,利用Cs表示符号位是否进位,利用Cp表示最高数值位是否进位。如果Cs ^ Cp的结果为真,则代表发生了溢出(运算结果大于0则为负溢出,小于0则为正溢出),否则运算结果正确。

例如:

1000 0011(补码为-3,原码为-125) 0000 0011(补码为3,原码为3)

+1100 1001(补码为-73,原码为-55) +1100 1001(补码为-73,原码为-55)

10100 1100(补码为76,原码为76) 01100 1100(补码为-76,原码为-52)

Cs为1,Cp为0所以产生了负溢出。 Cs为0,Cp为0所以结果正确。

(10)73二进制补码运算法则扩展阅读

二进制补码运算规则:

1、正数:原码=反码=补码

2、负数:原码(第一位是1符号位)=反码(除第一位符号位外,其它按位取反)=补码(反码+1)

3、0:原码=反码=补码=0

举例:

1、15-5=15+(-5)=10

原码:

15:0000 1111

-5:1000 0101

反码:

15:0000 1111

-5:1111 1010

补码:

15:0000 1111

-5:1111 1011

阅读全文

与73二进制补码运算法则相关的资料

热点内容
口才训练手册编译口才精品书系 浏览:995
linuxfunc 浏览:266
高德地图解压后的文件 浏览:636
php加水印类 浏览:225
编译原理定义表格和编写查找函数 浏览:349
指数函数和对数函数的高精度快速算法 浏览:207
c预编译干什么 浏览:24
hp网络共享文件夹 浏览:365
程序员如何不被废 浏览:806
二进制流转pdf 浏览:916
php判断爬虫 浏览:571
960除24除4简便算法 浏览:786
关于解压英语翻译 浏览:565
python控制键盘右键 浏览:921
php没有libmysqldll 浏览:829
时政新闻app哪个好 浏览:906
手机已加密怎么办 浏览:201
安卓手机截屏怎么传到苹果 浏览:529
京管家app哪里下载 浏览:33
文件夹横向排列的竖向排列 浏览:454