精华内容
下载资源
问答
  • 原码就是整数绝对值的二进制形式,为了解决计算机负数的运算,提出了反码、补码。1、原码原码就是符号位加上真值的绝对值,第一位表示符号,其余位表示值。对于4位的二进制,其取值范围就是[1000,0111],即[-8...
    f6cd861cc57aaabc752221a5db95ee18.png

    数据在计算机里面都是以0和1存储和运算的,这是冯诺依曼体系的基础。

    比如一个数在计算机中若有正负之分,则用一个数的最高位(符号位)用来表示它的正负,其中0表示正数,1表示负数。

    原码就是整数绝对值的二进制形式,为了解决计算机中有负数的运算,提出了反码、补码。

    1、原码

    原码就是符号位加上真值的绝对值,第一位表示符号,其余位表示值。对于4位的二进制,其取值范围就是[1000,0111],即[-8,7]。

    +5的原码:0101

    -5的原码:1101

    2、反码

    正数的反码是其本身。

    负数的反码是在其原码的基础上,符号位不变,其余位取反。

    +5的反码:0101

    -5的反码:1010

    可见如果一个反码表示的是负数,是无法直观地看出来它的数值,通常要将其先转换成原码再计算。

    3、补码

    正数的补码还是其本身。

    负数的补码是在其原码的基础上,符号位保持不变,其余位取反,最后+1。即反码加1。

    +5的补码:0101

    -5的补码:1011

    综上,计算机有三种编码方式来表示同一个数。

    对于+5和-5,

    [+5] = [0101]原 = [0101]反 = [0101]补

    [-5] = [1101]原 = [1010]反 = [1011]补

    计算机采用补码的形式来表示负数。欲知为何如此,请阅读计算机为何采用补码的形式来表示负数

    相关阅读

    十进制小数如何转换为二进制

    计算机为什么用二进制和十六进制

    展开全文
  • 有符号整、小数的原、反、补码表示范围,及补码比原、反码多表示一位的原因。计算机组成原理学习笔记。

      mark一下。
      以n位机器码为例。
    1. 原码:
      有符号整数:[-(2^n-1), 2^n-1];
      有符号小数:[-(1-2^(-n)), 1-2^(-n)];
    2. 反码的表示范围和原码相同
    3. 补码
      有符号整数:[-2^n, 2^n-1];
      有符号小数:[-1, 1-2^(-n)];

      从上我们可以看出,有符号数的补码要比原码和反码多表示出一位来,那么究竟是为什么呢?

      补码比原码、反码多出一位的原因:
      以8位机器码表示的有符号整数为例,它可以表示的原码和反码范围是[-127, 127],而可以表示的补码范围是[-128, 127]。
      原码和反码的±0是不同的表示方法,即:
        +0:00000000
        -0 :10000000
      而反码的±0都是同一个表示方法,同样以8位机器码为例:
        ±0 :00000000
      因此补码中便多出了一个<10000000>,可以用来表示其他的数,此处即可以表示真值为-128。在最位的1,既表示负号、又表示数值位。

    展开全文
  • 从上文:计算机的原码、反码和补码可知,计算机有三种编码方式来表示同一个数:原码:符号位加上真值的绝对值,第一位表示符号,其余位表示值。反码:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变...
    63c54a09cf729d46acd3dda1ddbb31fb.png

    从上文:计算机的原码、反码和补码可知,计算机有三种编码方式来表示同一个数:

    • 原码:符号位加上真值的绝对值,第一位表示符号,其余位表示值。
    • 反码:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余位取反。
    • 补码:正数的补码还是其本身;负数的补码是在其原码的基础上,符号位保持不变,其余位取反,最后+1。即反码加1。

    对于+1和-1,

    [+1] = [0001]原 = [0001]反 = [0001]补

    [-1] = [1001]原 = [1110]反 = [1111]补

    为什么计算机采用补码的形式来表示负数呢?

    首先我们知道,一个数在计算机中有正负之分,这个数的最高位(符号位)用来表示它的正负,其中0表示正数,1表示负数。

    对于计算机来说,加法是最基础的运算,要设计的尽量简单。

    根据加法的运算法则,a-b等于a+(-b)。

    如果能将符号位也参与到运算中,而非单独“辨识符号位”,就可以大大简化计算机的基础电路。

    74d3e79bbb6ec05d08cea14c4e0b1e61.png

    于是,人们开始探索只保留加法,并将符号位参与到运算中的方法。

    1、原码:1 - 1 = 0

    首先来看原码:1 - 1 = 0

    1 - 1 = 1 + (-1)

    = [0001]原 + [1001]原

    = [1002]原

    = -2

    这显然是错误的。

    2、反码:1 - 1 = 0

    对于反码:

    1 - 1 = 1 + (-1)

    = [0001]反 + [1110]反

    = [1111]反

    = [1000]原

    = -0

    用反码进行计算,发现结果是对的。但有一个问题是“0”的表示有两个:

    • -0([1000])
    • +0([0000])

    而0带符号是没有意义的。

    且采用补码形式,对于4位的二进制,其表达的范围为:[1000]反~[0111]反,即[1111]原~[0111]原,也即[-7,7]。

    因为“0”有两个编码形式,所以等于浪费了一个编码。

    3、补码:1 - 1 = 0

    而补码解决了反码的问题:

    1 - 1 = 1 + (-1)

    = [0001]补 + [1111]补

    = [0000]补

    = [0000]原

    = 0

    使用补码, 不仅仅解决了0的符号以及存在两个编码的问题,而且还能够用[1000]来表示-8,即多表示一个最低数。

    即对于4位的二进制,使用原码或反码表示的范围为[-7,+7],而使用补码表示的范围为[-8,7]。

    因为计算机采用补码来表示负数,所以对于编程中常用到的32位int类型,可以表示范围是:[-2^31,2^31-1] 。

    b8330117380024fbde086891814f0928.png

    相关阅读

    C语言的数据类型介绍

    展开全文
  • 有符号数(0表示正号,1表示负号) ① 小数表示:如(符号位与数字位用.(点)表示) +0.1101在机器中表示为 0.0101 - 0.0110在机器中表示为 1.00110 ②整数表示:如(符号位与数字位用,(逗号)表示) +1101 在机器...

    在这里插入图片描述
    ✪ 无符号数(默认为整数)

    无符号数顾名思义也就是不带符号的数
    若机器字长为8位,无符号数的表示范围 0~2^8-1 , 即0~255

    ✪ 有符号数(0表示正号,1表示负号)

    ① 小数表示:如(符号位与数字位用.(点)表示)
    +0.1101在机器中表示为 0.0101
    - 0.0110在机器中表示为 1.00110

    ②整数表示:如(符号位与数字位用,(逗号)表示)
    +1101 在机器中表示为 0,1101
    - 1101 在机器中表示为 1,1101

    0表示正号,1表示负号,这样把符号数字化得数成为机器数,把带“+”,“-”的数称为真值
    若机器字长为8位,有符号数的表示范围 -2^8- 1 2^8-1 , 即-256~255

    ✪ 原码 ✪

    计算机中最简单的表示方式,符号位+真值位表示
    0,10011 1,1001 0,0000 1,11111 这都是可以表示原码

    ✪ 反码 ✪

    正数反码:等于原码 。 如:0,0010的反码还是为0,0010
    负数反码:符号位不变,数值位与原码数值位相反。如1,1010的反码为1,0101

    ✪ 补码 ✪

    正数补码:等于原码 。 如:0,0010的补码还是为0,0010
    负数补码:符号位不变,反码的数值位+1。
    负数补码如1,1010的反码为1,0101,然后反码数值位加1求补码
    在这里插入图片描述
    方法二:补码用公式法怎么来求
    在这里插入图片描述
    例题:当X= -1001时,【X】补是多少?

    解析 :由题意知n=4
    [X]补 = 2^n+1 + X = 2^5 - 1001=1,0 0000 -1001 = 1,0011

    但是在反求真实值X的时候发现按公式得
    X [X]补 - 2^n+1 = 1,0011 - 1,0 0000 = 0,0011 = +0011-1001**

    所以当反求真实值X时用这个公式妥妥的 补码真实值 = 2^n+1 - 补码,算出之后,真实值符号变相反 ,n为真值位数!!

    那上面那道例题来说:

    解析: X= 2^n+1 - [X]补 =2^5-1,0011=1,0 0000 - 1,0011 = 001101(前面的0舍去)=0,1101,符号位在变相反即1,1101

    ✪ 移码 ✪

    当真值用补码表示时,由于符号位和数值部分一起编码,由于计算机无法分辨“,”逗号,所以人们很难从补码的形式上辨别其大小,例如:0,1010和1,1010,显而易见前者大于后者,而从代码形式上,会作为5位二进制代码比较,即01010<11010,其实恰恰相反;所以,有了移码
                     移码定义:
    在这里插入图片描述
    n 表示整数位数,x是指真值(带符号位的数)

    例题1:如 X=+10100,则X的移码是多少?

    解析:题意可知n=5
    [X]移=2^5 + 10100 = 1,10100 (用逗号将符号位和数值位分隔开)

    例题2:如 X= - 10100,则X的移码是多少?

    解析:题意可知n=5
    [X]移=2^5 - 10100 = 0,01100 (用逗号将符号位和数值位分隔开)

    ✪ 0的原反补移码

    0有+0 和 -0 之分

    假设 [+0]原=0,000 则 [+0]反=0,000 [+0]补=0,001 [+0]移=2^3+0=1,000

    假设 [- 0]原=1,000 则 [- 0]反=1,111 [ -0]补=0,001 [- 0]移=2^3 -0=1,000

    所以的补码和移码是唯一的

    ✪ 习题练习

    1.若寄存器内容为1111 1111,若它等于+127,则为()
    A、原码
    B、补码
    C、反码
    D、移码
    我的答案:D
    解析:
    A.若为原码,则它等于1,1111111= -(2^7-1)= -127
    B.若为补码,则它原码为1,0000001= - 1
    C.若为反码,则它原码为1,0000000= - 0
    D.若为移码,移码=真实值 + 2^(n-1),这里n=8,所以真实值=移码 - 2 ^7=1111 1111-1000 0000=0,111 1111=+127

    2.若寄存器内容为0000 0000,若它等于-128,则为()
    A、原码
    B、补码
    C、反码
    D、移码
    我的答案:D
    解析:
    A.若为原码,则它等于0,0000000= +0
    B.若为补码,则它原码为0,000 0000= +0或1,000 0000 = -0,由于0的补码只有一个,即为0
    (补码另一种方法(公式法):真实值= 2^n - 补码,这里n=8,真实值=2 ^8 - 补码=1 0000 0000 - 0000 0000=1 0000 0000(前面的1舍去)为0,000 0000, 符号位在变相反即为1,000 0000 = -0)
    C.若为反码,则它原码为0,1111111= +127
    D.若为移码,移码=真实值 +2^(n-1),这里n=8,所以真实值=移码 - 2 ^7=0000 0000-1000 0000=1,1000 0000= - 128

    3.若寄存器内容为1111 1111,若它等于-1,则为()
    A、原码
    B、补码
    C、反码
    D、移码
    我的答案:B
    解析:
    A.若为原码,则它等于1,111 1111=-127
    B.若为补码,则它原码为1,0000001= - 1
    (补码另一种方法(公式法):真实值= 2^n - 补码,这里n=8,真实值=2 ^8 - 补码=1 0000 0000 - 1111 1111=0 0000 0001(前面的0舍去)为0,000 0001, 符号位在变相反即为1,000 0001 = -1)
    C.若为反码,则它原码为1,000 000= -0
    D.若为移码,移码=真实值 + 2^(n-1),这里n=8,所以真实值=移码 - 2 ^7=1111 1111-1000 0000=0,111 1111=+127

    4.若寄存器内容为1000 0000,若它等于-0,则为()
    A、原码
    B、补码
    C、反码
    D、移码
    我的答案:A
    解析:
    A.若为原码,则它等于1,000 0000=- 0
    B.若为补码,则它原码为1,000 0000= -0
    C.若为反码,则它原码为1,111 1111= - 127
    D.若为移码,移码=真实值 + 2^(n-1),这里n=8,所以真实值=移码 - 2 ^7=1000 0000-1000 0000=0,000 0000=+0

    5.在机器数( )中,零的表示形式是唯一的。
    A、原码
    B、补码
    C、补码和反码
    D、原码和反码
    我的答案:B
    ✪ 习题小总结:

    ① 移码 = 真实值 +2^(n-1), n为存储空间长度(即机器数的长度,并非真值长度,机器数的长度比真值长度多1)
    ② 补码 = 真实值 + 2^n(当真值是负整数时,n为存储空间长度(即机器数的长度)
    ③ 补码真实值 = 2^n - 补码,算出之后,真实值符号变相反 ,n为存储空间长度(即机器数的长度)!!
    ④ 0表示正号,1表示负号,这样把符号数字化得数成为机器数,把带“+”,“-”的数称为真值

    展开全文
  • 同样的n位二进制数,分为有符号数和无符号数。 我们以5位二进制数为例。 先说较为简单的无符号数,表示的范围为0 0000~1 1111,转换为十进制就是0 ~ 31。 如果最高位也即第五位是符号位,正数表示的范围为0 0
  • 计算机以二进制补码存储数值,当...有符号char范围有符号char最大值(正数):0111 1111即127,最小值1000 0000(补码) 即-128。 注1000 0000 -1=0111 1111 即2^7-1=128-1=127; -128即- 2^7; 所以有符号...
  • 阿拉伯数字只有一个0, 但是按照计算机的处理应该有两个0,一个+0,一个-0; 假设是8位,+0和-0的原码分别是: ...那8位二进制有符号整数能表示的最大范围是多少呢? 如果按照原码进行表示,1111 1111 - 0
  • 有符号数的原码、反码、补码详解

    千次阅读 2019-02-28 01:48:30
    有符号数 signed %d 符号位+数值位(例如:int i = +7;) int 类型占4个字节,1个...计算机中存储有符号数的时候是按照补码的形式存进去的。 正数的原码、反码、补码都一样 负数的原码、反码、补码就不一样了 -7的...
  • 首先说原码,原码是有符号数中最简单的编码方式。原码表示法在数值前面增加了一位符号位(即最高位为符号位):0表示为正数,1表示为负数,其余为数值位,表示数值大小。 纯整数的原码 原码的范围是 – (2n–1) ≤ x...
  • 原码:最左侧一位表示符号,且0表示正数,1表示负数;二进制转换为十进制时,符号位只用于取正负号,不参与转化。...根据原码的定义规则可知对于1个字节的有符号二进制原码的取值范围:[11111111]~[0111111
  • 符号位可以和数值为一起参加运算,比如俩个负数相加,只要结果在范围内,则可直接按位相加,这是原码做不到的(原码符号位相加会出错)。 由于其模运算的特性,补码可以直接利用加法的形式计算整数间的减法,既省时...
  • n位二进制有符号数据的补码表示范围:[−2n−1,2n−1−1][-2^{n-1} ,2^{n-1}-1][−2n−1,2n−1−1]。 n位二进制无符号数据(正数)的补码(三码相同)表示范围:[0,2n−1][0 ,2^{n}-1][0,2n−1]。 6.补码补码是...
  • 无符号数: 即没有符号的数。 在c语言中就是 unsigned 类型的。 无符号数在计算机中的存储较为简单, 因为没有符号位, 直接将...即有符号的数, 符号数存储时不仅要将数据部分存入计算机, 还要将符号数字化的存进去。
  • 原码、反码和补码计算机中参与运算的数据有两种:无符号数和有符号数。对于无符号数,所有二进制数据位数均用来表示数值本身,没有正负之分;而对于有符号数,其二进制数据位,除了必须表明其数值大小外,还必须...
  •  我们依然以C语言为例,C语言当中提供了多种整数类型,一共十种,位数为1、2、4、8,其中32位机器上,4位的两种,在64位机器上,8位的两种。具体的LZ这里就不多做介绍了。以下是32位和64位系统上,这
  • 有符号数 有原码,反码,补码等,他的范围是随意的 计算机通常用补码来表示有符号计算机的一个数据可以看作是有符号数,也可以看作无符号数的 也就是说计算机并不知道你存的是有符号数还是无符号数,而且所做...
  • 有符号数在计算机中的表示

    千次阅读 2012-03-06 16:13:27
    8位有符号补码表示范围:-128至127. 根据补码的几条规定即可推出上述结论: 1 若二进制每位全为0,则表示数0 2 若最高位(即符号位)为0,表示正数 3 若最高位为1, 表示是负数,而该负数的绝对值是多少呢?将...
  • 负数的补码=反码(除符号位外其他都取反)+1 正数 [0-127] 就不必说了。 主要是负数 [-128,-1] 由于是按补码存值的,所以如下对应表 补码计算机中存储的码) 原码 1111 1111 1000 0...
  • #有符号整型补码表示(一个字节) ##正数 ###最左边符号位,占一位,用0表示,数值表示范围为:0~127,对应存储为:00000000~01111111 ##负数 ###最左边符号位,占一位,用1表示,数值表示范围为:-128~-1,...
  • 8位二进制的数表示的数值范围为:0000000011111111,即0255,但是会个问题,负数如何表示呢?这时候就需要符号位出场了。 计算机中规定,第一位是符号位,其中0代表正,1代表负,剩下的位才表示数值。对于8位二...
  • 首先要明白,在计算机中,数以二进制的形式存在,其中有无符号数和有符号数 无符号数的,相当于十进制中的自然数,没有负数,因此八位无符号数的范围 00000000-11111111,而有符号数的最高位表示符号,最高位为0...
  • 计算机的运算方法——无符号数和有符号数无符号数有符号数机器数与真值源码表示法整数小数补码表示整数小数快速获取补码方法反码表示整数小数快速取反方法移码表示 无符号数 定义:没有正负号的数 寄存器的位数表示...
  • 无符号数和有符号数 文章目录无符号数和有符号数1.无符号数2.有符号数1.机器数与真值2.原码表示法整数小数3.补码表示法1.补的概念2.一个小例子3.补码的定义1.整数2.小数4.求补码的快捷方式4.举例4.反码表示法1.整数...
  • 因此对于一个单字节的二进制数而言,有符号数所表示的数值范围为:-127 (11111111) ~ +127 (00000000) ;无符号数的表示范围为:0 ~ 255 [00000000 ~ 11111111]。 (二)原码、反码、补码 (1)概念 原码:最高位为...
  • 计算机为什么用补码运算 使用补码,可以将符号位和数值域统一...原码和反码表示的0两种形式+0和-0,而采用补码表示的时候,00000000是+0即0,10000000不再是-0而是-128这样,补码表示的数的范围就是-128~+127,不
  • 补码

    2021-03-09 23:01:42
    规则:正数取反,换符号位,+1 ...一个字节8位,对于signed数(带符号数)可以表示的数值范围在 -128到+127。 用二进制表示也就是 10000000 - 01111111(注意:最高位表示符号)。 最高位是1的都是负数
  • 原码就是整数绝对值的二进制形式,为了解决计算机负数的运算,提出了反码、补码。1、原码原码就是符号位加上真值的绝对值,第一位表示符号,其余位表示值。对于4位的二进制,其取值范围就是[1000,0111],即[-8...
  • 原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0两种表示:+0和-0),其余位表示数值的大小。反码表示法规定:正数的反码与其原码相同;负数的反码是对正数逐位取反...
  • 有符号数的表示无符号数对于一个基r、k位的无符号整数,其表示范围应为:注意!区间符号[a,b]表示的是某个表示系统上的区间,而不是实数集 上的区间。比如对于整数表示系统,所使用的[a,b]仅表示该区间上的所有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 402
精华内容 160
关键字:

有符号补码范围计算机