精华内容
下载资源
问答
  • 二进制补码计算原理详解

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

    二进制的负数在计算机中采用补码的方式表示。很多人很好奇为什么使用补码,直接使用原码表示多好,看上去更加直观和易于计算。然而事实告诉我们,这种直观只是我们人类的一厢情愿罢了,在计算机看来,补码才是它们最想要的。那么,为什么计算机使用补码更好,又是如何通过补码来计算数值的呢?

    我看过网络上很多解释补码的文章,几乎一致的回答就是符号位不变,其他各位逐位求反再加一。在此我想说,这些都不是根本原理。谁都知道这么求,数电第一章就明确写了怎么求,关键是为什么这么算,其中的原理是什么?

    本文主要的内容就是深入讲解补码的原理,其中内容有相互引用成分及计算机基础要求,不适合初学者阅读。当然,随便看看无所谓啦。

    1.什么是补码

        这个没有找到官方定义,只进行个人定义。   

        个人定义:补码是计算机中用来表示负数,使得负数能够使用加法器参与加法运算的一种码。

        加减是计算机中最常用的运算,加法一般使用加法器来实现,减法则使用减法器实现。那有什么办法可以将减法变为加法,这样就可以让系统只实现加法即可,答案就是补码。

        理解补码最简单的例子就是时钟。

        例1:

        假如一个时钟现在显示的是10点钟,如何将它调到6点钟?

        解:有两种方法,一是向后拨8个小时,二是向前拨4个小时

        在这个例子中,8 和 4 互为补数,也就是说4的补码是8,8的补码是4,而这个时钟的就是12

        注意:可能有人会想,在往后调8个小时虽然也调到了6点,但是他实际上比原来日期多了12小时。是的,的确如此,但是你的时钟有地方存储了这多余的12个小时吗?答案是没有,所以在你调完后,你没有记录这12个小时,换句话说,你把这溢出的12个小时自动舍弃了。当第二个人来查看闹钟时间的时候,他看到的时间就是准的。

        例2:

        一个数的数值是11,他的模是16,那么他的补码是多少?

        解:16-11 = 5,即补码就是5。

    2.模

       关于模没有找到固定的定义,简单来说模就是一个循环的周期,在例1中,时钟的一个周期就是12,所以模是12。一周的模是7天,一天的模是24小时。模是补码的一个重要概念。

    3.使用补码运算

       例3

       模为32,使用补码运算该算式16-13,13 - 16。

       解 16-13 = (16 + (32-13))% 32 = 35 % 32 = 3 

        13-16 = (13 + (32-16))% 32 = 29 % 32 = 29

    4.使用补码进行二进制运算    

        有看过数电基础的都应该记得,第一章就有说明二进制补码是如何运算的。正数的补码即为自己,负数的补码为符号位不变,其余逐位求反再加1。

        使用该定义,先通过例子求出数值,再对例子进行详细讲解,为什么可以使用负数的补码来运算。

        例4   通过二进制求15-11的值

        要想让减法变加法,必须转换算式为 15 + (-11)

        15为正数,符号位为0,二进制表示为 01111

         -11为负数,符号位为1,负数原码为  11011 ,补码符号位不变,其余逐位求反再 +1,即 10101

       所以 15 + (-11) = 01111 + 10101 = 100100 舍弃第一位溢出位,即00100,即+4

      这是一个最简单的补码算法运算的例子,却有很多不解之处。

     1.为什么负数 (-11 )逐位求反再+1就可以代表原来的数?

     2.为什么第一位舍弃

     3.为什么符号位能够参与运算

     先看问题1,-11 先不考虑符号,观察11的二进制表示,11使用二进制表示是 1011,将1011 逐位求反 得到 0100,因为是逐位求反,1011 +0100 = 1111 ,而1111 + 1 = 10000,发现了什么?10000是四位2二进制数的模。为什么10000是4位二进制数的模呢?原理也很简单,4位寄存器最高能表示什么数?即 (二进制)1111 = (十进制) 15 , 15 +1 =16 = (二进制)10000,后四位寄存器清0,所以模为16。

    所以不管几位二进制数,取反后得到的值加原码会刚好的到所有的位都是1的二进制数,再加一就刚好进位得到模。所以取反加一是无论如何都能取到补码的。比如 :(原)101 +  (补)((反)010 +1) = 8 ,(原)10 + (补)((反)01 +1)= 4。

    所以,负数符号位不变,其余逐位求反 +1 只是算出补码最简单的方法,而不是理论基础。

    前面提到过,使用补码代替原码,计算后模掉溢出得到数值就可以得到计算的值了。

    再看问题2,为什么高位舍弃,这个问题其实在例1中已经做了说明,因为你没有存储这个高位的空间,用最简单的解释来解释就是,一个4位的寄存器,只能存储数据的后四位,第一位进位没地方放,就像例1中多出来的12小时,没有地方存储,那么就丢弃了,反正结果正确就行。可能有人会问,你说丢弃就丢弃吗,丢了你怎么保证是正确的?

    重新再看一次例4,现在考虑符号位,将符号位加入运算。

    15 - 11 = 15 + (-11),其中 -11 为 11011(加了一位符号位,所以模为 16 * 2^1) 他的补码为 10101 = 21

    所以 15 -11 变为 15 +21 = 36 (01111 + 10101) ,原先是减一个数,变换后却变成了一个比减数更大的加数了,能不溢出吗。所以要模掉溢出位 36 % 32 = 4 。仔细观察被模数36 = 1 00100 你会发现,在第二位之前的所有高位都是32的倍数,所以用32进行模运算就会全部清0,这就是为什么高位可以直接舍弃的原因,因为高位永远会是模的倍数,在模的过程中会被清0。

    最后看问题3,为什么符号位能够参与运算,可能在这前面一直被符号位困扰,为什么参与运算就没有问题,看了这里的解释,我相信你将不会再被困扰。

    符号位对于我对二进制补码的理解产生了很大的阻碍,我不明白为什么符号位可以参与运算,而且算出来还是对的。花了不少时间理解了符号位的含义。

        首先放弃符号位就是计算机表示专门定义出来表示正数和负数用的这个思维,换成这样一种理解思路:我们观察计算机中一个二进制数,它没有专门的符号位,但是正数和负数在计算机中存储第一位二进制数会存在差异,如果它的第一位是0,那么他就是正数原码,如果它的第一位是1,那么他就是负数补码,我们通过观察第一位是0还是1即可知道这个数是正数还是负数。

    通过以下例子,可以发现符号位其实是算出来的。

    例5:计算机运算 9 - 12

     解:9 转五位二进制为 01001 //模为32(100000)

    因为12是减数,所以将12转为补码变为加数,方便参与加法运算

    12 = 01100(原) = 10011 + 1 = 10100(补)

    01001 + 10100 = 11101

    11101% 100000= 11101

    从结果看,我们可以发现,第一位为1,第一位如果是1,那么这个数值是负数补码,由此可知,这个数是一个负数,只是在计算机中,他表示为11101,反求原码,即可得到 (11101 - 1) 反 = 00011  = 十进制数 3,由此可知,11101表示的是负数的3

    从这个例子当中可以看到,在运算中完全没有考虑符号位,仅用单纯的加法运算进行运算,而得到的结果11101也没有人为去添加一个符号位,符号位是计算所得的,所以他才能参与运算我们应该反过来看符号位,正是在补码运算中,存在第一位为0则是正数,为1则是负数这个规律,我们才方便地认定第一位为符号位,符号位跟人为定义没有任何关系(人为定义的符号位不可能满足数学规则参与数学运算)。

     

    补充:在例5中可以发现,我们在第一位之前补了一个0,将四位二进制数补成五位二进制数来计算,为什么要补这个0呢?为了说明这个问题,我们来算一个错误的运算

    例6:计算机运算 0 - 12

    解 : 我们仅仅用四位二进制数(四位寄存器)来算

    12 = (二进制)1100 12转为二进制后是一个四位二进制数,它的模为10000

    因为12是减数,所以将12转为补码变为加数,方便参与加法运算

    12 = 1100(原) = 0011 + 1 = 0100(补)

    0000 + 0100 = 0100 = 4 ,第一位是0,说明是正数原码, 即运算结果为 +4

    4 != -12 运算出错

    通过结果发现,只用四位二进制数运算,结果是错误的,为什么会产生这种错误呢?因为寄存器位数不够,四位寄存器只能存储 0 -15 的数值,没有多余的寄存器位置用来表示这个数的正负,我们虽然算出了符号位,但是计算后所得到的符号位却没有地方存放,导致符号位缺失,我们又误将四位二进制数结果的第一位当做符号位来判断数的正负,才会出现错误的结果。

    通过例5我们可以知道,符号位是计算后得出来的,所以我们要预先要在寄存器第一位留出一个位置存放计算后得出的符号位,所以我们先在第一位前面补一个0占位。

    由此可知: 要想计算结果正确, 需要满足 : 寄存器位数 >= max(操作数1,操作数2,....) 的二进制位数加一位

     

    最后,附上一张五位二进制数运算转换关系图,自己体会二进制数如何带着所谓的符号位在计算机中运算:

    六位二进制运算转换关系图

    有如下几点:

    1:五位二进制数的所有正数都在圆环的黑线上,而负数都在圆环的红线上,如果在黑线上,那么六位寄存器第一位必为0,而在红线上,那么第一位必为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代表算出来了负数,说明说是正数加正数发生了上溢出,结果变成负数了。

    展开全文
  • 简单地说,补码就是反码1。计算机中为什么要使用补码呢?主要原因:1、使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则...

    简单地说,补码就是反码加1。

    计算机中为什么要使用补码呢?

    主要原因:1、使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 2、补码与原码的转换过程几乎是相同的。

    (1)正数的补码

    与原码相同。   【例1】+9的补码是00001001。(备注:这个+9的补码说的是用8位的2进制来表示补码的,补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。)

    (2)负数的补码

    符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。   同一个数字在不同的补码表示形式里头,是不同的。比方说-15的补码,在8位2进制里头是11110001,然而在16位2进制补码表示的情况下,就成了1111111111110001。在这篇补码概述里头涉及的补码转换默认了把一个数转换成8位2进制的e69da5e887aae799bee5baa631333335336439补码形式,每一种补码表示形式都只能表示有限的数字。   【例2】求-7的补码。

    因为给定数是负数,则符号位为“1”。

    后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001)

    所以-7的补码是11111001。

    已知一个数的补码,求原码的操作分两种情况:

    (1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。

    (2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。

    另一种方法求负数的补码如下:

    例如:求-15的补码

    第一步:+15:00001111

    第二步:逐位取反(1变成0,0变成1),然后在末尾加1。

    11110001

    再举一个例子验证下:求-64的补码

    +64:01000000

    11000000

    【例3】已知一个补码为11111001,则原码是10000111(-7)。

    因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。

    其余七位1111001取反后为0000110;

    再加1,所以是10000111。

    展开全文
  • 二进制补码计算原理

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

    二进制的负数在计算机中采用补码的方式表示。很多人很好奇为什么使用补码,直接使用原码表示多好,看上去更加直观和易于计算。然而事实告诉我们,这种直观只是我们人类的一厢情愿罢了,在计算机看来,补码才是它们最想要的。那么,为什么计算机使用补码更好,又是如何通过补码来计算数值的呢?

    我看过网络上很多解释补码的文章,几乎一致的回答就是符号位不变,其他各位逐位求反再加一。在此我想说,这些都不是根本原理。谁都知道这么求,数电第一章就明确写了怎么求,关键是为什么这么算,其中的原理是什么?

    1.什么是补码

    这个没有找到官方定义,只进行个人定义。   
    
    个人定义:补码是计算机中用来表示负数,使得负数能够使用加法器参与加法运算的一种码。
    
    加减是计算机中最常用的运算,加法一般使用加法器来实现,减法则使用减法器实现。那有什么办法可以将减法变为加法,这样就可以让系统只实现加法即可,答案就是补码。
    
    理解补码最简单的例子就是时钟。
    
    例1:
    
    假如一个时钟现在显示的是10点钟,如何将它调到6点钟?
    
    解:有两种方法,一是向后拨8个小时,二是向前拨4个小时
    
    在这个例子中,8 和 4 互为补数,也就是说4的补码是8,8的补码是4,而这个时钟的模就是12
    
    注意:可能有人会想,在往后调8个小时虽然也调到了6点,但是他实际上比原来日期多了12小时。是的,的确如此,但是你的时钟有地方存储了这多余的12个小时吗?答案是没有,所以在你调完后,你没有记录这12个小时,换句话说,你把这溢出的12个小时自动舍弃了。当第二个人来查看闹钟时间的时候,他看到的时间就是准的。
    
    例2:
    
    一个数的数值是11,他的模是16,那么他的补码是多少?
    
    解:16-11 = 5,即补码就是5。
    

    2.模

    关于模没有找到固定的定义,简单来说模就是一个循环的周期,在例1中,时钟的一个周期就是12,所以模是12。一周的模是7天,一天的模是24小时。模是补码的一个重要概念。

    3.使用补码运算

    例3

    模为32,使用补码运算该算式16-13,13 - 16。

    解 16-13 = (16 + (32-13))% 32 = 35 % 32 = 3

    13-16 = (13 + (32-16))% 32 = 29 % 32 = 29
    

    4.使用补码进行二进制运算

    有看过数电基础的都应该记得,第一章就有说明二进制补码是如何运算的。正数的补码即为自己,负数的补码为符号位不变,其余逐位求反再加1。
    
    使用该定义,先通过例子求出数值,再对例子进行详细讲解,为什么可以使用负数的补码来运算。
    
    例4   通过二进制求15-11的值
    
    要想让减法变加法,必须转换算式为 15 + (-11)
    
    15为正数,符号位为0,二进制表示为 01111
    
     -11为负数,符号位为1,负数原码为  11011 ,补码符号位不变,其余逐位求反再 +1,即 10101
    

    所以 15 + (-11) = 01111 + 10101 = 100100 舍弃第一位溢出位,即00100,即+4

    这是一个最简单的补码算法运算的例子,却有很多不解之处。

    1.为什么负数 (-11 )逐位求反再+1就可以代表原来的数?

    2.为什么第一位舍弃

    3.为什么符号位能够参与运算

    先看问题1,-11 先不考虑符号,观察11的二进制表示,11使用二进制表示是 1011,将1011 逐位求反 得到 0100,因为是逐位求反,1011 +0100 = 1111 ,而1111 + 1 = 10000,发现了什么?10000是四位2二进制数的模。为什么10000是4位二进制数的模呢?原理也很简单,4位寄存器最高能表示什么数?即 (二进制)1111 = (十进制) 15 , 15 +1 =16 = (二进制)10000,后四位寄存器清0,所以模为16。

    所以不管几位二进制数,取反后得到的值加原码会刚好的到所有的位都是1的二进制数,再加一就刚好进位得到模。所以取反加一是无论如何都能取到补码的。比如 :(原)101 + (补)((反)010 +1) = 8 ,(原)10 + (补)((反)01 +1)= 4。

    所以,负数符号位不变,其余逐位求反 +1 只是算出补码最简单的方法,而不是理论基础。

    前面提到过,使用补码代替原码,计算后模掉溢出得到数值就可以得到计算的值了。

    再看问题2,为什么高位舍弃,这个问题其实在例1中已经做了说明,因为你没有存储这个高位的空间,用最简单的解释来解释就是,一个4位的寄存器,只能存储数据的后四位,第一位进位没地方放,就像例1中多出来的12小时,没有地方存储,那么就丢弃了,反正结果正确就行。可能有人会问,你说丢弃就丢弃吗,丢了你怎么保证是正确的?

    重新再看一次例4,现在考虑符号位,将符号位加入运算。

    15 - 11 = 15 + (-11),其中 -11 为 11011(加了一位符号位,所以模为 16 * 2^1) 他的补码为 10101 = 21

    所以 15 -11 变为 15 +21 = 36 (01111 + 10101) ,原先是减一个数,变换后却变成了一个比减数更大的加数了,能不溢出吗。所以要模掉溢出位 36 % 32 = 4 。仔细观察被模数36 = 1 00100 你会发现,在第二位之前的所有高位都是32的倍数,所以用32进行模运算就会全部清0,这就是为什么高位可以直接舍弃的原因,因为高位永远会是模的倍数,在模的过程中会被清0。

    最后看问题3,为什么符号位能够参与运算,可能在这前面一直被符号位困扰,为什么参与运算就没有问题,看了这里的解释,我相信你将不会再被困扰。

    符号位对于我对二进制补码的理解产生了很大的阻碍,我不明白为什么符号位可以参与运算,而且算出来还是对的。花了不少时间理解了符号位的含义。

    首先放弃符号位就是计算机表示专门定义出来表示正数和负数用的这个思维,换成这样一种理解思路:我们观察计算机中一个二进制数,它没有专门的符号位,但是正数和负数在计算机中存储第一位二进制数会存在差异,如果它的第一位是0,那么他就是正数原码,如果它的第一位是1,那么他就是负数补码,我们通过观察第一位是0还是1即可知道这个数是正数还是负数。
    
    展开全文
  • 所以下面是学习啦小编给大家总结的八位二进制补码最小值和二进制补码知识点。八位二进制补码最小值8位二进制补码表示整数的最小值是 -128, 最大值是 +127.原因:正数的补码就是其本身,8位二进制最大正整数是 ...
  • 二进制补码到十进制补码及其内的运算——关于补码的一点学习
  • 本篇文章是我的第一篇博客,用于帮助那些和我一样处于迷茫中的朋友。如若对你有帮助的话请点个赞(不介意的可以投个币)。如若引用还请注明出处!...如果我想用八位二进制补码表示怎么办? 答案是从
  • 十进制数-38的8位二进制补码是首先,写出原码 :? 1010 0110?? ,???? 最高位的1表示负号?负数的补码是其原码的各位取反,再1 ,(最高位符号位除外),所以,?十进制数-38的8位二进制补码是?? 1101 1010关于二进制...
  • 二进制补码

    2019-10-06 20:08:02
    二进制补码主要是为了解决负整数的加减法运算(减法转化为加法)。 补码表示法 原码表示法就是用二进制的最高位表示符号,0表示正数,1表示负数。以8位为例:1就是表示为0000 0001,-1表示为1000 0001. 而补码的...
  • 二进制补码是如何把减法转变为加法的

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

    千次阅读 2018-09-26 10:42:30
    aaa的补码 bbb的补码 为 0 aaa 与$ b$ 互为相反数 a a a  和$ b$ 又可以分解成 a1a1a1 +$ a2 $ b1b1b1+b2b2b2 形式 假设有一个不等于bbb的负数ccc 若$ c$ ...
  • 二进制浮点数的加减法运算

    千次阅读 多人点赞 2019-09-27 11:45:55
    二进制浮点数的规格化表示形式定义为N=2E⋅MN=2^E·MN=2E⋅M其中MMM称为尾数,EEE称为阶码 例如二进制浮点数11.011011的规格化表示形式为:2+0010×0.110110112^{+0010}×0.110110112+0010×0.11011011该浮点数在...
  • 二进制运算 计算机中,数值的运算都是用二进制表示的。 一个二进制数中,最高位是符号位,0 为正数,1 为负数。 6 的二进制:0000 0110 8 的二进制:0000 1000 -8 的二进制:1000 1000 如计算: 6 + 8  ...
  • 二进制补码加减运算的溢出检查

    千次阅读 2020-06-08 23:41:07
    二进制减运算的溢出检查
  • ####实现二进制补码的加法 (全加法实现) 首先声明两个int类型的变量 CF 和OF,用来模拟加法过程中的进位和溢出 对于加法结果的每一位,都是由CF、oprend1、oprend2三位异或产生的结果(这三个数里面有奇数个1,...
  • 0.1.2 二进制补码

    2014-09-03 13:44:00
    《编程导论(Java)·0.1.2 二进制补码》 p6:【冯•诺伊曼体系结构计算机使用二进制。人类之所以习惯十进制,据说是由于用手指头来计算比較方便,而人正好有10个指头。】 本节就2面(page6和p7)纸。尽管二进制...
  • 亚里士多德说:“今天十进制...”然而,数在计算机中确是以二制形式表示的,因为计算机是用数字电路搭成的,数字电路中只有1和0两种状态,也就是说计算机只有两个手指头,所以对计算机来说二进制(Binary)是最自然...
  • 首先得知道,在java中,int类型占4个字节,1个字节等于8位二进制,所以int类型32位,范围是-2147483648到2147483647, 因为1000 0000, 0000 0000, 0000 0000, 0000 0000这个是-2^31=-2147483648,所以负数多一个。 ...
  • 二进制补码运算

    2020-07-23 13:52:43
    二进制负数的在计算机中采用补码的方式表示。很多人很好奇为什么使用补码,直接使用原码表示多好,看上去更加直观和易于计算。然而事实告诉我们,这种直观只是我们人类的一厢情愿罢了,在计算机看来,补码才是它们最...
  • 我是一名vb.net初学者,现在正在尝试做一个十进制转换二进制补码的控制台程序 ’十进制转二进制的步骤是将十进制数除以二然直到商为0,然后反向读取余数。请问要怎么获取余数呢? ’如何让程序自动判断输入...
  • 二进制补码的特性

    千次阅读 2010-08-07 17:14:00
    C语言是一种较接近机器底层的语言,但它的语言标准中并没有规定有符号数要用二进制补码来表示;可事实上几乎所有平台上有符号数都用二进制补码来表示,它已成为“事实上的标准”,这无疑源于二进制补码巧妙的设计,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,178
精华内容 4,471
关键字:

二进制补码计算加减法