精华内容
下载资源
问答
  • 为什么计算机中数字符号位0表示正数,1表示负数

    万次阅读 多人点赞 2019-03-09 21:09:50
    只知道书本上说是有一个符号位,当该符号位为0时,表示的是正数,为1时表示负数。我那时没搞懂为什么这样规定,我觉得1么,代表正数挺合理的,那么0就自然表示负数咯,所以不解,只能死记硬背:0正1负。   我个人...

      大学时上计算机组成原理课程的时候,上到计算机如何存储数据的相关知识时,因为计算机世界里面所有的数据归根结底都是由0和1来存储的,那么如何表达数值的正负呢?只知道书本上说是有一个符号位,当该符号位为0时,表示的是正数,为1时表示负数。我那时没搞懂为什么这样规定,我觉得1么,代表正数挺合理的,那么0就自然表示负数咯,所以不解,只能死记硬背:0正1负
      我个人对于不知道前因后果而要死记硬背的东西是很难记住的,黑格尔在《法哲学原理》里说过:存在即合理,我也觉得一个东西的存在必然是有它的原因的,只有知道为什么这样、找到根源,我们才能更好地理解它。现在我来揭示在计算机表示数值正负时,为什么0为正,1为负。
      当代绝大多数计算机表示浮点数都是采用IEEE标准的,这里简化一下,我们只关心符号位,那么对于一个数,计算机其实是以下面的式子来描述它的:(-1)s×\timesX,这里的指数s就是用来决定数值X是正数还是负数,显而易见,当s=0时,则X为正数(因为任何数的0次幂都是1),当s=1时,则X为负数(因为-1的1次幂为-1),至此我们就理解了为什么符号位为0时表示正数,为1时表示负数啦,而且这辈子都不会记错了吧!

    展开全文
  • 本篇主要详细讲解计算机的原码,反码与补码 一,机器数与真值 ...说明机器数是带符号的,其中最高位0表示正数,1表示负数。 2,真值 列如上面的有符号数1000 0011表示-3,而不是无符号数131。为了区分...

    本篇主要详细讲解计算机的原码,反码与补码
    一,机器数与真值
    1,机器数
    机器数:一个数在计算机中的二进制表示形式
    比如十进制中的数 +3 ,如果用字长为8位的存储单元来存储,则二进制表示为00000011。如果是 -3,二进制表示为10000011 。
    说明机器数是带符号的,其中最高位0表示正数,1表示负数。
    2,真值

    列如上面的有符号数1000 0011表示-3,而不是无符号数131。为了区分,将带符号位的机器数对应的真值称为机器数的真值。

    机器数 00000011的真值 = +000 0011 = +3 机器数 10000011的真值 = -000 0011 = -3
    二,原码,反码,补码的基础概念和计算方法
    原码,反码,补码只是计算机存储数字的一种方式。
    1,原码
    原码就是用第一位表示符号位,其余位表示值,比如8位的二进制数

    [+1]= 0000 0001

    [-1]= 1000 0001

    因为第一位为符号位,所以8位二进制数的取值范围为

    [1111 1111 , 0111 1111] 即 【-127,+127】

    2,反码
    反码是在原码的基础上符号位不变,其余的位数取反,比如

    [+3] = 00000011 =0111 1100

    [-3] = 1000 0011 =1111 1100

    3,补码
    正数的补码为它本身,比如

    [+3] = 0000 0011 =0000 0011

    负数的补码为其反码+1

    [-3] = 1000 0011 =1111 1100=1111 1101

    三,为何要用原码,反码,补码
    通过上述我们知道计算机有三种编码方式,对于正数三种编码方式的结果都相同

    [+3] = 0000 0011 =0000 0011=0000 0011

    [-3]= 1000 0011 =1111 1100=1111 1101

    首先, 因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减。 但是对于计算机, 辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法。
    我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 3-3 = 3 + (-3) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了。
    原码将符号位参与运算的计算方法如下

    3-3=3+(-3)= 0000 0011 + 1000 0011 = 1000 0110 = -6

    如果用原码表示让符号位参与运算,对于减法来说结果显然不正确,这就是计算机内部不适用原码表示一个数的原因。
    反码的计算方法如下

    3-3=3+(-3)= 0000 0011 + 1000 0011 = 0000 0011 +1111 1100 = 1111 1111 = 1000 0000 = -0

    可以看到用反码计算减法结果真值部分是正确的,但数字0却有两种编码方式+0与-0,显然0带符号位没有任何意义。而且会有0000 0000和1000 0000两个编码表示0。
    补码的出现就解决了0的符号以及两个编码的问题
    补码的计算方法如下

    3-3=3+(-3)= 0000 0011 + 1000 0011 = 0000 0011 +1111 1100 = 0000 0011 + 1111 1101 =0000 0000 = 0000 0000 = 0

    这样0用[0000 0000]表示,而以前出现问题的-0则不存在了。而且可以用[1000 0000]表示-128

    (-1)+(-127)= 1000 0001 + 1111 1111 = 1111 1110 +1000 0000 = 1111 1111 + 1000 0001 =1000 0000 = -128

    使用补码运算修复了0的编码表示,而且还能表示一个最低数,-128并没有原码和反码表示。8位二进制数表示的范围为[-128,127],也就是[-27,27-1],其他同理。

    展开全文
  • 参考:...  原码:将一个整数,转换成二进制,就是其原码。 ... 如单字节的5的原码为:0000 0101;... 反码:正数的反码就是其原码;负数的反码是将原码,除符号位以外,每一位取反。  如

    参考:http://blog.chinaunix.net/uid-26495963-id-3074603.html


     原码:将一个整数,转换成二进制,就是其原码。
         如单字节的5的原码为:0000 0101;-5的原码为1000 0101。
                   

     反码:正数的反码就是其原码;负数的反码是将原码中,
    除符号位以外,每一位取反
         如单字节的5的反码为:0000 0101;-5的反码为1111 1010。
                  
     补码:正数的补码就是其原码;
    负数的反码+1就是补码
         如单字节的5的补码为:0000 0101;-5的补码为1111 1011。
                   
     在计算机中,正数是直接用原码表示的,如单字节5,在计算机中就表示为:0000 0101。
             负数用补码表示,如单字节-5,在计算机中表示为1111 1011。

     这儿就有一个问题,为什么在计算机中,负数用补码表示呢?为什么不直接用原码表示?如单字节-5:1000 0101。
      

     
        拿单字节整数来说,无符号型,其表示范围是[0,255],总共表示了256个数据。有符号型,其表示范围是[-128,127]。
      
        先看无符号,0表示为0000 0000,255表示为1111 1111,刚好满足了要求,可以表示256个数据。
      
        再看有符号的,若是用原码表示,0表示为0000 000。因为咱们有符号,所以应该也有个负0(虽然它还是0):1000 0000。

        那我们看看这样还能够满足我们的要求,表示256个数据么?
        
        正数,没问题,127是0111 1111,1是0000 0001,当然其它的应该也没有问题。
        
        负数呢,-1是1000 0001,那么把负号去掉,最大的数是111 1111,也就是127,所以负数中最小能表示的数据是-127。
        
        这样似乎不太对劲,该如何去表示-128?貌似直接用原码无法表示,而我们却有两个0。
        
        如果我们把其中的一个0指定为-128,不行么?这也是一个想法,不过有两个问题:一是它与-127的跨度过大;二是在用硬件进行运算时不方便。
        
        所以,计算机中,负数是采用补码表示
        如单字节-1,原码为1000 0001,反码为1111 1110,补码为1111 1111,计算机中的单字节-1就表示为1111 1111。后面的数据依次减1
        单字节-127,原码是1111 1111,反码1000 0000,补码是1000 0001,计算机中单字节-127表示为1000 0001。
        
        单字节-128,原码貌似表示不出来,除了符号为,最大的数只能是127了,其在计算机中的表示为1000 0000。



    展开全文
  • 计算机中负数正数的二进制表示

    千次阅读 2012-11-07 09:33:38
    原码:就是十进制的数字转换为二进制在计算机中表示,如正2,二进制表示为000 0010,(这里取8位显示),-2的2进制表示为1000 0010。前面的一位表示符号位,其中,正数0负数为1. 反码:正数的反码和原码相同,...

    计算机中,数值的二进制表示有几个概念。

    原码,补码和反码。计算机中,数值都是以补码的形式保存。

    原码:就是十进制的数字转换为二进制在计算机中的表示,如正2,二进制表示为000 0010,(这里取8位显示),-2的2进制表示为1000 0010。前面的一位表示符号位,其中,正数为0,负数为1.

    反码:正数的反码和原码相同,负数的反码就是保持原有符号位不变,其他位取反。

    正数反码不变,负数如下:

    -2
    原码:1000 0010
    取反:1111 1101 取反的反码


    补码:正数的补码和原码一样,负数的补码,就是在原来的原码基础上,保持符号位不变,其他位取反,然后再加1:

    如:

        1000 0010
        1111 1101 取反
        1111 1110 +1

    负数在计算机中就是以补码的形式保存。

    已知一个补码,反推出其原码。

    如:

        1111 0111
        1111 0110 -1
        1000 1001 取反
    和求补码一样,逆运算,先最末位位-1,在保持符号位不变取反,这样得到原码,这个数值表示-9.



    展开全文
  • 计算机中正数,负数到底是什么?

    千次阅读 2017-11-14 10:18:25
    ---------------------------------------- author:hjjdebug date: 2017年 11月 14日 星期二 09:47:13 ...我要用最通俗的语言,解释清楚计算机中正数,负数和补码的概念! 1. 计算机的算术,逻辑运算单元(cpu)是不区分正
  • 转载一篇文章,留下来学习,加深下印象。 ... 问: 负数在计算机中如何表示?...很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,8位机
  • 计算机中正数是按照原码存储的,负数是按照补码存储的 下面举例 1 和-1,按照8位存储。 : 正数正数的原码,反码,补码都和原码一样,即正常的二进制表示负数:原码就是正常的二进制表示。反码就是原码的按位...
  • 正数负数的取反操作 下面的表示将用“,”分隔符号位和数字位。 正数取反 如对15取反: 15的二进制为(0,00001111)2(0,00001111)_2(0,00001111)2​由于是正整数,其原码就是补码。 对其补码取反(1,11110000)2(1,...
  • 负数的反码是将原码,除符号位以外,每一位取反。如单字节的5的反码为:0000 0101;-5的原码为1111 1010。 补码:正数的补码就是其原码;负数的反码+1就是补码。如单字节的5的补码为:0000 0101;-5的原码为...
  • 以8b为例对比如下:(谁能给我补补课,说说为什么是正0负1,按照我的理解应该是正1负0更符合人类的思维,前者是进行了一次技术上的mapping了) 正号:0 负号:1 原码: +1 0 000 0001 -1 1 000 0001 反码: +...
  • 负数在计算机中如何表示

    千次阅读 2019-05-03 18:07:04
    很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,8位机,规定每个字节的最高位为符号位。那么,+8就是00001000,而-8则是10001000。 但是,随便找一本...
  • 关于负数在计算机中表示方法

    千次阅读 2018-07-19 15:56:02
    这就是为什么char 型的变量的取值范围为-128~+127,因为他的第一位要表示一个数的正负符号,第一位为0表示正数,为1表示负数 如:用char 定义的十进制数18 二进制:0001 0010B 八进制:022 十六进制:0x12 如:...
  • 计算机中负数表示

    千次阅读 2014-09-19 17:52:44
    很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,8位机,规定每个字节的最高位为符号位。那么,+8就是00001000,而-8则是10001000。 但是,随便找一本...
  • 正数|| 负数 > 正数u || 负数 永远>负数u一、负数 < 正数 负数u > 正数 (负数u平移,到正数的上一半部分去了)-1 < 2 true常识-1 > 2u true 负数-->无符号数...
  • 负数在计算机中表示和存储

    千次阅读 2015-03-30 18:39:53
    在计算机系统,数值一律用补码表示和存储。含符号位和数值位,符号位:0表示“正”; 1表示“负”。 正数的补码 = 原码 负数的补码 = 负数的原码取反(符号位保持不变)+ 1  eg: [ -7 ]补=11111001(八位二进制...
  • 很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,8位机,规定每个字节的最高位为符号位。那么,+8就是00001000,而-8则是10001000。 但是,...
  • 计算机中负数表示

    千次阅读 2019-03-08 16:34:10
    1.计算机中,不管正数还是负数都用二进制补码表示。 2.正数的原码、反码、补码都一样。假设整型是8位二进制表示,那么正数表示范围是0~127。补码表示是0000 0000~0111 1111 3.下面开始理解负数的补码:假设...
  • 很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,8位机,规定每个字节的最高位为符号位。那么,+8就是00001000,而-8则是10001000。 但是,随便找一本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,345
精华内容 15,738
关键字:

在计算机中0表示正数还是负数