精华内容
下载资源
问答
  • 二进制补码减法公式推导

    千次阅读 2020-10-30 12:19:59
    二进制中 : 1. 位宽不变的情况下, 模 加1等于0. 模表示所有的位数都是1, 例如位宽是2, 模就是11. 模加1就是 11b + 01b = 100b ,但是位宽不变, 只取低二位, 所以就是0 2. 模 = A + A的反码 ( 以下用 ~A 表示) , ...

    二进制中 :

    1. 位宽不变的情况下,膜 加1等于0. 膜表示所有的位数都是1, 例如位宽是2, 膜就是11.
       模加1就是 11b + 01b = 100b ,但是位宽不变, 只取低二位, 所以就是0

    2. 膜  = A + A的反码 ( 以下用 ~A 表示) , 例如 11 = 01 +10 , 但是这里 A 不能等于膜, 否则就是 A=A 没法继续计算求值. A是大于0的正数,


    所以

            模       = A + ~A

    =>   模  +1 =A + ~A +1
     
    =>   0        = A + ~A +1

    =>       -A  = ~A +1 (称作-A的补码)

    所以八位数的 -3 可以用 ~00000011+1=11111101表示,11111101就是-3的补码

    减 3就等于加上 -3 (注意是-3不是3) 的补码, 计算的时要有符号位, 算出来的数也是一个补码, 要恢复成原码看

    例如用8位, 包含1位符号位为例:
    (1)   5 - 3 =2 (可以看做是5加上 -3的补码)
    00000101 + 11111101= 00000010 (正数补码等于原码)

    (2)  3 -5 = -2  (-5 可以用-5的补码表示, 就是11111011)
    00000011 + 11111011 = 11111110(补码) = 10000010 (原码 = -2 )

    如果把公式改写成 - (5-3) 就免去了最后把补码转成原码的过程,只要将结果的符号位取反就行, 因为计算结果是正数, 补码等于原码
    -(00000101 + 11111101 )  = - ( 00000010 ) =  10000010 (原码 = -2 )

    (3) 如果是负数相加, 就转化为正数,例如 -3 -5 = - (3+5)

    展开全文
  • 原码,补码二进制减法

    千次阅读 2019-02-21 00:26:07
    这里面考察了二进制减法减法也就牵涉了原码补码的一些概念。 这里进行下梳理。   一。原码,补码概念 1.原码就是早期用来表示数字的一种方式。 一个正数,转换为二进制位就是这个正数的原码。 负数的...

    这篇博客从一道题说起,

    已知 x  = (1<<31)-3,求x&-x?

    这里面考察了二进制的减法,减法也就牵涉了原码补码的一些概念。

    这里进行下梳理。

     

    一。原码,补码概念

    1.原码就是早期用来表示数字的一种方式。

    一个正数,转换为二进制位就是这个正数的原码。

    负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码

    例如:假设机器是32位系统,

    int类型的 3 的原码是 00000000 00000000 00000000 00000011

    对于int类型的-3的原码是00000000 00000000 00000000 00000011高位补1得到10000000 00000000 00000000 00000011

    2.反码

    正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反

    int类型的 3 的反码是 00000000 00000000 00000000 00000011,和原码一样

    int类型的-3的反码是11111111 11111111 11111111 11111100

    3.补码

    正数的补码与原码相同,负数的补码为其原码除符号位外所有位取反(得到反码了),然后最低位加1.

    int类型的 3 的补码是 00000000 00000000 00000000 00000011

    int类型的 -3 的补码是 11111111 11111111 1111111 11111101

    过程:10000000 00000000 00000000 00000011除符号位取反

           -> 11111111 11111111 1111111 11111100 再加1

           -> 11111111 11111111 1111111 11111101

    总结来说,求负数补码有两种方法。

    (1)正数原码求反+1

    (2)负数原码除符号位求反+1

     

    二。二进制减法

    在运算过程中,从右往左逐位进行计算。 
    (1)1-0=1; 
    (2)0不够减1,向前借1后加2变成2;2-1=1; 
    (3)0在上一步被借1所以减为-1,-1不够减0,向前借一后加2变成1;1-0=1; 
    (4)在上一步被借一所以减为0,0不够减1,向前借一后加2变成2;2-1=1; 
    (5)在上一步被借一所以减为-1,-1不够减1,向前借一后加2变成1;1-1=0; 
    (6)在上一步被借一所以减为0,0-0=0. 
     

    三。开头题目

    (1) 求1<<31:10000000 0000000 00000000 00000000

    (2)减去3: 

       10000000 0000000 00000000 00000000

    -00000000 00000000 00000000 00000011

    = 01111111 11111111 11111111 11111101 即 x

    (3)求x&-x

    首先求-x的外码(参考资料3),x原码求反+1,得到10000000 00000000 00000000 00000011

    01111111 11111111 11111111 11111101&10000000 00000000 00000000 00000011 = 1(答案)

     

    四。参考资料:

    1.正数的原码,反码,补码

    2.二进制减法

    3.计算机负数与正数的按位与操作

    展开全文
  • 计算机补码的加减法 因为减法可以转化为加法,所以只考虑加法的四种情况。 正 + 正:结果为正,有可能发生上溢,结果为负。 负 + 负:结果为负,有可能发生下溢,结果为正。 正 - 负:A-B = A+(-B)

    原码的加减法

    加法一共有四种可能:

    • 正数 + 正数:取绝对值相加即可,结果是正数
    • 负数 + 负数:取绝对值相加,结果是负数
    • 正数 + 负数:绝对值大的数减去绝对值小的数,符号谁大取谁的符号
    • 负数 + 正数:绝对值大的数减去绝对值小的数,符号谁大取谁的符号

    减法一共也有四种可能,转换成加法来算即可

    计算机补码的加减法

    因为减法可以转化为加法,所以只考虑加法的四种情况。
    正 + 正:结果为正,有可能发生上溢,结果为负。
    负 + 负:结果为负,有可能发生下溢,结果为正。
    正 - 负:A-B = A+(-B)
    负 - 负:A-B = A+(-B)

    溢出判断

    法一:
    例如计算A+B=S

    V = A S B s S S ‾ + A S ‾   B S ‾   S S V = A_SB_s\overline{S_S} + \overline{A_S}\ \overline{B_S}\ S_S V=ASBsSS+AS BS SS
    在这个公式中, A S A_S AS表示为A的符号(正数为0负数为1), B S B_S BS表示为B的符号, S S S_S SS为得出的结果的符号。
    带入上面的逻辑表达式进行计算,如果为1就发生溢出,为0结果正常。

    法二:
    将两个补码带符号进行相加:

    符号位进位最高数位进位
    上溢出01
    下溢出10

    最高数位进位:除去符号位最左边的两个数相加后的进位
    符号位进位:符号位相加后的进位

    法三
    将原来的补码符号位变成两位,正数是00,负数是11,这样8位二进制码就变成了9位。
    将两数相加,如果结果的符号位是01,则发生上溢,如果是10,则发生下溢。可以理解为补充出来的那个符号位是本来应该要得出的结果的符号,而原本的那个符号位表示的是实际计算出来的符号。比如说计算出来符号位是01,0是补充出来的符号位,1是原本8位二进制的符号位。0代表原本应该算出来正数,1代表算出来了负数,说明说是正数加正数发生了上溢出,结果变成负数了。

    展开全文
  • 补码二进制减法

    千次阅读 2020-04-13 20:40:56
    有关二进制的负数及减法运算二进制数表示方法:原码反码补码二进制减法运算法则: ** 二进制数表示方法: ** 无符号二进制数(正数)(8位)(能够表示的十进制数范围 0-255 ) 举例: 10(8’b0000_1010) 100(8’b...

    **

    二进制数表示方法:

    **
    无符号二进制数(正数)(8位)(能够表示的十进制数范围 0-255 )
    举例: 10(8’b0000_1010) 100(8’b0110_0100) 255(8’b1111_1111)

    有符号二进制数(正数 负数)(8位)(能够表示的十进制数范围 -128 ~ 127)
    举例: 10(8’b0000_1010) 100(8’b0110_0100) 255(8’b1111_1111)
    举例:-10(8‘b1000_1010) -100(8’b1110_0100) -127(8’b1111_1111)

    **

    原码反码补码

    **
    计算机存储和运算过程中一般会用到原码,反码和补码
    下面以8位二进制机器码举例说明:
    原码:最高位代表符号位,其余位为数值的绝对值
    如:+8 (8’b0000_1000) -8(8’b1000_1000)
    反码:存储时正数的反码与原码相同,负数的反码符号位保持不变,其余位数按位取反
    如:+8 (8’b0000_1000) -8(8’b1111_1000)
    补码:存储时正数的补码与原码相同,负数的补码在反码的最低位+1得到
    如:+8 (8’b0000_1000) -8(8’b1111_1001)

    举例:分别写出+3和-3的原码,反码和补码
    在这里插入图片描述
    **

    二进制减法运算法则:

    **
    在做减法之前,我们首先来看一下,如果没有定义位宽(二进制的位数),那么我们要在参与运算的数值及结果中取一个最大的绝对值,找到能够表示此绝对值的二进制数位宽并+1.
    例如:
    100+50 = 150 当我们计算100+50时, 定义为宽最小为8位(无符号)或9位(有符号)或更大也可
    100-50 = 50 定义为宽最小8位 (有符号)或更大也可
    50-100 = -50 定义为宽最小为8位(有符号)或更大也可
    -50-100 = -150 定义为宽最小为9位(有符号)或更大也可

    接下来我们来看减法运算
    例1: 100-50
    由于7位2进制最大表示128,则要表示100最少需要7位,但由于涉及减法运算,所以加一位符号位用8位表示。

    100的8位二进制为 8‘b0,110_0100; (红色表示符号位)
    -50的8位二进制为 8‘b1,011_0010; 反码(为了计算补码)为8‘b1,100_1101 补码:8‘b1,100_1110
    实际运算过程为两个二进制补码相加;(可以理解为100+(-50))
    在这里插入图片描述
    由于是8位计算,最后的进位舍去,得到二进制8‘b0,011_0010 = 50(D)

    例2: -100-50
    由于运算结果为-150 绝对值150最大,7位2进制数最大只能表示128,因此需要8位表示150,又因为是有符号运算,因此至少要用9位去表示-150。

    -100的8位二进制为 9‘b1,0110_0100; 反码为9‘b1,1001_1011 补码:9‘b1,1001_1100
    -50的8位二进制为 9‘b1,0011_0010; 反码为9‘b1,1100_1101 补码:9‘b1,1100_1110
    实际运算过程为两个二进制补码相加;(可以理解为(-100)+(-50))
    在这里插入图片描述
    此时我们得到一个负数9‘b1,0110_1010,但是不要忘记,负数的存储是以补码形式存储的,我们需要把它转化为原码,因为我们太熟悉原码了。

    求原码的过程和求反码正好相反,首先减一,得到反码,对反码再求反码,得到原码:
    负数9‘b1,0110_1010的反码是9‘b1,0110_1001,原码是9‘b1,1001_0110。

    展开全文
  • 二进制补码与小数

    千次阅读 2021-06-05 16:46:22
    由于二进制不能表示负数,所以必须使用正数来表示负数,将最高位当符号位使用,0正1负,这样就可以使用加法来进行减法运算。 而补数就是用正数表示负数,一个正数的补数就是它的负数,所以二进制数与它
  • 本文说明一个基本的问题,补码的问题。需要说明一点补码是对负整数在计算机中存储的一种形式;另一种形式是负数在计算机中可以用符号+负数绝对值的形式表示一个负数;比如(-3: 1000 0011存储)但是这种表示的负数有两...
  • 二进制减法

    千次阅读 2020-12-09 10:15:44
    这里需要说明的是,在计算机中做二进制数运算时,一定要明确是在多少位的整型前提下进行的,这样才能够正确处理位数溢出的问题。 其实减法也可以看成加法 6+(-4) 无论加减法总结:补码相加 结果再求补码 1...
  • 计算机原码,反码,补码的计算规则以及计算机内部二进制减法举例 ##<1>. 原码:符号位+数组位;第一位为符号位,正数为0,负数为1;后面的位数为数值位,是真值的二进制表现形式。 反码:正数的反码就是原码...
  • 计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,”正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过是我们绝大多数人生来具有10个手指头这个解剖学事实的结果。尽管在历史上...
  • 二进制减法类似于十进制的减法,我们从十进制的减法来推出二进制减法如何进行运算。 二进制计算 例如101001-011010=001111(41-26=15)的运算。 灰色部分为计算过程,绿色字为被减一得到的数,红色字为借一后得到...
  • 二进制补码可以用来表示小数吗?】可以,不过需要你自己来处理.方法是,按照所需要的精度,将该小数放大若干倍,当整数处理.为方便通常放大2的若干次方倍.这样,你就可以把这个整数看成“定点小数”,即保留了若干位...
  • 二进制数的补码及运算(2)

    千次阅读 2017-02-26 12:04:48
    减法 减法不作赘述了,将被减数转化为其相反数的补码进行加法运算即可。 3.乘法 正数*正数 注意不要忘记符号位。最后的位宽应该是7bit(115除去符号位的位宽)+5bit(23除去符号位的位宽)+1(符号位) = 13bit,有...
  • 二进制补码到十进制补码及其内的运算——关于补码的一点学习
  • 原码:一个整数按照绝对值的大小转化成二进制的数 反码:将二进制数按位取反 补码:反码加一 负数从真值求补码 先求出其原码 求其反码 反码加一 如求-20的补码 其原码为00010100;其反码为11101011;其补码为...
  • 二进制补码是如何把减法转变为加法的

    千次阅读 多人点赞 2018-12-17 11:45:35
    用一个例子来解释补码的原理: 假设现在标准时间为4点整,而有一只表已经到7点了,为了校准时间,可以采用两种方法:一种是将时针退7-4=3格;是将时针向前拨12-3=9格,这两种方法都可以校准到4点。 摘自《计算机...
  • 有符号数二进制补码加减运算

    万次阅读 2017-12-07 21:45:38
    在电路设计时,为了简化设计,加减法电路用同一个电路实现。这就需要参与运算的操作数用补码表示。  对于正数,原码,反码,补码相同。  而对于负数,原码符号位为1,其余各位此数的绝对值;反码是在除去符号位...
  • 二进制补码计算原理

    2021-03-11 08:29:04
    二进制的负数在计算机中采用补码的方式表示。很多人很好奇为什么使用补码,直接使用原码表示多好,看上去更加直观和易于计算。然而事实告诉我们,这种直观只是我们人类的一厢情愿罢了,在计算机看来,补码才是它们最...
  • 计算机基础三: 二进制减法实现

    千次阅读 2020-06-05 23:06:01
    在上一章中了解了如何实现二进制加法, 加法是始终从两个加数的最右列向左列进位计算的, 而在减法中没有进位, 只有借位. 253 - 176 = 77 上面的式子我们不难算出来, 但习惯性的思维让我们用借位的方式求值. 在不借位...
  • 二进制补码运算

    千次阅读 多人点赞 2020-07-23 13:52:43
    二进制负数的在计算机中采用补码的方式表示。很多人很好奇为什么使用补码,直接使用原码表示多好,看上去更加直观和易于计算。然而事实告诉我们,这种直观只是我们人类的一厢情愿罢了,在计算机看来,补码才是它们最...
  • 二进制补码计算原理详解

    万次阅读 多人点赞 2018-07-03 17:34:54
    二进制负数的在计算机中采用补码的方式表示。很多人很好奇为什么使用补码,直接使用原码表示多好,看上去更加直观和易于计算。然而事实告诉我们,这种直观只是我们人类的一厢情愿罢了,在计算机看来,补码才是它们最...
  • 二进制补码加减运算的溢出检查

    千次阅读 2020-06-08 23:41:07
    二进制中加减运算的溢出检查
  • 计算机中的负数:二进制补码

    千次阅读 2021-01-01 00:02:25
    二进制运算 计算机中,数值的运算都是用二进制表示的。 一个二进制数中,最高位是符号位,0 为正数,1 为负数。 6 的二进制:0000 0110 8 的二进制:0000 1000 -8 的二进制:1000 1000 如计算: 6 + 8  ...
  • 为什么8位二进制补码取值范围是-128~127

    千次阅读 多人点赞 2020-05-31 21:59:23
    0-255的二进制如上图 我们惊奇地发现,如果二进制是无符号的,那么我们如何表示负数呢? 我们总不能用+1表示正数,-1表示负数吧,计算机只认识0和1啊。。。于是有种想法应运而生, 最高位为符号位,用0表示正数,...
  • 八位二进制补码最小值

    千次阅读 2021-07-27 08:41:16
    所以下面是学习啦小编给大家总结的八位二进制补码最小值和二进制补码知识点。八位二进制补码最小值8位二进制补码表示整数的最小值是 -128, 最大值是 +127.原因:正数的补码就是其本身,8位二进制最大正整数是 ...
  • 2,16进制原码补码反码问题

    千次阅读 2021-05-21 02:31:16
    1. 在计算机里,通常用数字后面紧跟一个英文字母来表示该数的数字,十进制一般用D,二进制用B,八进制用O,十六进用H来表示,2.首先,十进制数转换成二进制,除2取余,按箭头方向写,自上而下写出来,所以45D转换成...
  • 二进制减法的简单过程

    万次阅读 2019-09-17 16:50:11
    二进制减法的运算方法 二进制减法有两种运算方法,可以使用向高位借位的办法,也可以将减法转为加法 采用借位的办法不是很快捷,比较容易看错,示例如下: 1 0 1 0 -0 1 1 1 ———— 0 0 1 1 被减数末尾的0向前一位...
  • 二进制数的反码和补码

    千次阅读 2019-01-16 22:12:54
    在大学的学习中,一开始自认为已经学会了反码与补码,但在看到多种表述之后,...首先从最一般的意义上,分别说一下二进制的反码和补码: 1、反码 1’s complement 把所有的0变为1,所有的1变为0。 如: 10110010 B...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,758
精华内容 5,903
关键字:

二进制减法补码

友情链接: haval.zip