精华内容
下载资源
问答
  • 首先了解一下原码,反码,补码的概念 原码 原码的表示方法: 简单来说就是,在机器中我们使用0和1来区分一个数的符号,用0来表示正数,用1来表示负数。而原码表示就是将一个数绝对值的二进制表示出来后根据是正数...

    首先了解一下原码,反码,补码的概念

    原码

    原码的表示方法:
    当X为定点整数时

    当X为定点小数时
    简单来说就是,在机器中我们使用0和1来区分一个数的符号,用0来表示正数,用1来表示负数。而原码表示就是将一个数绝对值的二进制表示出来后根据是正数还是负数在前面加0或1表示数的符号。这里注意一点,在定点小数中,原码是不能表示出-1这个值的

    反码

    反码的表示方法
    在这里插入图片描述
    在这里插入图片描述
    简单易懂一些的话其实就是如果是正数,X的反码就等于原码,如果是负数,将X的数值位全部取反

    补码

    在这里插入图片描述
    在这里插入图片描述
    对求一个数的补码有一个简单的口诀,若X是正数,则X的补码等于原码,若X是负数,X的补码就是在求出原码的基础上数值位全部取反后在最后一位加1。

    机器数表示范围

    根据上面的定义可以知道,原码和反码对于0有两种表示方法
    原码中
    [+0] = 0.0000,[-0] = 1.0000
    反码中
    [+0] = 0.0000,[-0] = 1.1111
    补码中
    [+0]=[-0]=0.0000
    这里可以知道,在表示数据的时候,补码比原码少了一个-0,而由于表示数据所用的位数是一样的,也就是能表示的整数的个数不会变,所以补码会比原码和补码多表示一个数

    对于定点整数

    设位数一共为8位
    原码表示范围为 -127-127,即1111 1111~0111 1111
    反码表示范围为 -127-127,即1000 0000~0111 1111
    补码表示范围为 -128-127,即1000 0000~0111 1111
    我们可以尝试求一下-128的原码,但可以发现7位二进制表示不出来,必须得用8位二进制表示,但这样符号位就被占用了。但由于上面说的补码比原码和补码少一个0的表示方法,这就让补码多了一个10000000来表示其他的数,这里具体的细节我也不是很懂@_@,但可以这样记吧,-1到-127已经有对应的原码和补码了,所以也会有对应的补码,而10000000首位是1代表负数,不能和其他数的表示起冲突所以就是-128了。由此,补码可以表示128个负数,1个0以及127个负数共256个数

    对于定点小数

    还是设位数一共8位
    原码表示范围为1.111 1111 ~0.111 1111,即-127/128到127/128
    反码表示范围为1.000 0000~0.111 1111,即-127/128到127/128
    补码表示范围为1.000 0000~0.111 1111,即-1到127/128
    在这里原码和反码都好理解,就是补码会有一个问题,为什么补码会有一个1.000 0000而且居然对应的值是-1,也就是说如果小数用补码表示的话最小值是-1。这里如果用一开始说的取反加一你会发现根本不是这个值。之后才知道取反加一靠的是原码,但看前面原码的定义公式你会发现原码根本表示不了定点小数-1,原码所能表示的是定点整数-1,定点小数-1这里严谨一点的话其实是-1.0。
    这里要求定点小数-1.0的补码的话就要用到上面的补码定义公式了(要不然我怎么会贴hhh),由公式可知,-1.0的补码为2+X = 2-1.0 = 1.000 0000
    当然也有这样的理解
    在这里插入图片描述
    总结:由于补码表示0的唯一性,补码比原码少一个-0的表示,多一个-1的表示以及负整数表示范围多了一个-128
    PS:主要是把自己最近碰到的问题写一下让自己记牢一些。其实如果把上面贴的几个公式吃透的话这些问题根本不会有的orz,注意对比原码反码补码边界的取值你会发现其实说的就是这些东西orz

    参考:

    http://bbs.kaoyan.com/t2806127p1

    展开全文
  • -1补码

    万次阅读 2019-08-13 20:37:32
    首先把-1的绝对值求出来,等于1,...最后加1:1111 1111 1111 1111,好了,这就是-1补码了即步骤如下:先求正数的原码,然后按位取反,再加一。 -1二进制存储的特点: -1 的二进制存储 是 全一。 转载于:https:...
    首先把-1的绝对值求出来,等于1,
    然后求1的原码(也就是它的二进制):0000 0000 0000 0001,
    然后按位取反(每个位上的0变成1,1变成0):1111 1111 1111 1110;
    最后加1:1111 1111 1111 1111,
    好了,这就是-1的补码

    即步骤如下:
    先求正数的原码,
    然后按位取反,再加一。

    -1二进制存储的特点: -1 的二进制存储 是 全一。

    转载于:https://www.cnblogs.com/dayInAndOut/p/3627742.html

    展开全文
  • 注:-128的补码和定点小数-1补码补码中比较特殊 先看下公式 1. -128的补码1,0000000? [+0]原=0,000 0000 [-0]原=1,000 0000 [+0]反=0,000 0000 [+0]反=1,111 1111 [+0]补=0,000 0000 [-0]补=0,000 0000 ...

    注:-128的补码和定点小数-1的补码在补码中比较特殊

    先看公式

    公式

    1. -128的补码是1,0000000?

    [+0]原=0,000 0000 [-0]原=1,000 0000
    [+0]反=0,000 0000 [+0]反=1,111 1111
    [+0]补=0,000 0000 [-0]补=0,000 0000
    正数的原码补码反码一样
    而负数的反码是原码数值位全部取反,负数的补码则是原码数值位全部取反+1,符号位向上进位得到第九位,得到[-0]补=10,000 0000,但是采用机器字长只有8bit,所以第九位1丢弃,最终得到的[-0]补=0,000 0000=[+0]补
    因此真值0的补码只有一种表现形式,而多出来一种表现形式,则将[x]补=1,0000000表示x=-128 ,补码整数的表示范围就会比原码多表示 -2^n )

    2. 定点小数-1的补码是1.0000000?

    定点小数-1
    准确的说是-1.0
    我们通常求补码是在原码的基础上取反+1,但是-1.0的原码通过纯小数的原码表示公式却表示不了,我们无法得到-1.0的原码
    但我们可以通过纯小数的补码表示公式得到-1.0的补码:
    [-1.0]补=2+(-1.0)=1.000 0000

    展开全文
  • 以n=8位为例,1的二进制表示为00000001,则 -1的二进制补码可以由上面的公式写出来 [ − 1 ] 补 = 2 n − 1 = 2 8 − 1 = 1 , 00000000 − 00000001 = 11111112 − 00000001 = 11111111 [-1]_补=2^n-1=2^8-1=1,...

    首先需要知道:二进制补码表示的正数实际上左侧有无限多个0,而负数有无限多个1.只是为了适应硬件的宽度,二进制表示的数的前导位被隐藏了。

    举例

    下面看一下64位的 − 4 t e n -4_{ten} 4ten的补码(以64位机器(机器里面存的是补码)为例):

    00000000 , 00000000 , 00000000 , 00000000 , 00000000 , 00000000 , 00000000 , 0000010 0 t w o = [ 4 ] 补 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100_{two}=[4]_{补} 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100two=[4]
    11111111 , 11111111 , 11111111 , 11111111 , 11111111 , 11111111 , 11111111 , 1111110 0 t w o = [ − 4 ] 补 11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111100_{two}=[-4]_{补} 11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111100two=[4]
    下标two表示二进制,下标ten表示十进制。

    我们把 [ − 4 ] 补 [-4]_{补} [4] [ 4 ] 补 [4]_{补} [4]相加会得到什么呢?

    [ − 4 ] 补 + [ 4 ] 补 = 00000000 , 00000000 , 00000000 , 00000000 , 00000000 , 00000000 , 00000000 , 0000010 0 t w o + 11111111 , 11111111 , 11111111 , 11111111 , 11111111 , 11111111 , 11111111 , 1111110 0 t w o = 1 , 00000000 , 00000000 , 00000000 , 00000000 , 00000000 , 00000000 , 00000000 , 0000010 0 t w o [-4]_{补}+[4]_{补}=00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100_{two}\\+11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111100_{two}\\=1,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100_{two} [4]+[4]=00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100two+11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111100two=1,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100two
    我们发现 64位补码相加得到 2 64 2^{64} 264!

    下面求8位的 − 4 t e n -4_{ten} 4ten的补码

    已知 有符号数 − 4 t e n = 1000010 0 t w o -4_{ten}=10000100_{two} 4ten=10000100two,

    根据口诀:负数的补码=负数的原码取反(符号位不变,数据位取反)+1
    可以得到: [ − 4 ] 补 = 1111101 1 t w o + 0000000 1 t w o = 1111110 0 t w o [-4]_{补}=11111011_{two}+00000001_{two}=11111100_{two} [4]=11111011two+00000001two=11111100two,

    4 t e n 4_{ten} 4ten的补码仍然是原码,即 [ 4 ] 补 = 0000010 0 t w o [4]_{补}=00000100_{two} [4]=00000100two,

    我们把 [ − 4 ] 补 [-4]_{补} [4] [ 4 ] 补 [4]_{补} [4]相加会得到什么呢?

    [ − 4 ] 补 + [ 4 ] 补 = 1111110 0 t w o + 0000010 0 t w o = 1 , 00000000 [-4]_{补}+[4]_{补}=11111100_{two}+00000100_{two}=1,00000000 [4]+[4]=11111100two+00000100two=1,00000000

    我们发现 8位补码相加得到 2 8 2^{8} 28!

    归纳

    二进制补码得名于下述规则:一个n位的数与其n位的相反数做无符号加法,结果为 2 n 2^n 2n,因此,x的相反数(或相补数)-x 等于 2 n − x 2^n-x 2nx,或叫“二进制补码”

    以n=8位为例,1的二进制表示为00000001,则 -1的二进制补码可以由上面的公式写出来
    [ − 1 ] 补 = 2 n − 1 = 2 8 − 1 = 1 , 00000000 − 00000001 = 11111112 − 00000001 = 11111111 [-1]_补=2^n-1=2^8-1=1,00000000-00000001=11111112-00000001=11111111 [1]=2n1=281=1,0000000000000001=1111111200000001=11111111
    注:这里11111112仅仅是方便计算,实际二进制中逢二进一,还是100000000.

    同样的,我们来看-128的情况。

    对于 12 8 t e n = 2 7 = 10000000 128_{ten}=2^7=10000000 128ten=27=10000000 ,这里的n=8,根据补码的定义:

    [ − 128 ] 补 = 2 8 − 128 = 1 , 00000000 − 10000000 = 11111112 − 10000000 = 10000000 [-128]_{补}=2^8-128=1,00000000-10000000=11111112-10000000=10000000 [128]=28128=1,0000000010000000=1111111210000000=10000000

    综上,求1个负数(-x)的补码,只需要用 2 n − x 2^n-x 2nx即可,这里的n表示这个负数的二进制位数。注意这里x是正数

    后记:这个问题在《计算机组成与设计-硬件/软件接口》一书中有详细的解释。

    展开全文
  • 例如,用8比特来表示+1和-1的原码:[+1]原=0000 0001,[-1]原=1000 0001。原码的表示虽然简单直观,但实现加减法较为复杂,符号位不能直接参与运算。例如,如果用上述原码进行+1加上-1的运算,则得到的...
  • 已知x的补码,求-x的补码

    千次阅读 2021-09-09 17:10:16
    对比[x]补与[-x]补的每一位可以发现,把[x]补连同符号位的每一位都取反再加1即可得到[-x]补 当x为负数 还是举个例子:设[x]补 = 11011,则有 ∵ [x]补 = 11011; ∴ [x]原 = 10101; ∴ [-x]原 = 00101; ∴ [-x]补 =...
  • 计算机导论-9-补码

    2021-02-25 23:19:33
    计算机导论-9-补码 补码 现在几乎所有计算机都采用二进制补码来存储n位存储...在二进制补码表示法中最左边的位决定符号,称为符号位,0表示正数,1表示负数 反码:就是将原码各个位取反,即将1变为0,0变为1; ...
  • C语言-补码

    千次阅读 2018-09-28 13:54:04
    在计算机内,有符号数有3种表示法: 原码  原码就是符号位加上真值的绝对值,即用第一个二进制位表示符号(正数该位为0,负数该位为1),... 负数的补码是在其反码的基础上+1  举例:  [+1] = [0000 0001]原 ...
  • 今天看书时看到位运算符,其中有一个-8的补码为11111111 11111111 11111111 111111000 网上很多都是 1.对应正数原码 2.所有位取反 3.加1 其实有的人不明白第2步。解释一下应该是(从最低位开始,遇到1保留,其余...
  • 32767+1=-32768 补码

    千次阅读 2020-03-22 01:14:35
    涉及到数值二进制的存储形式,有三种,原码,反码,补码 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1。因为第一位是符号位,...
  • 要想读懂下面,你的先知道具备原码、反码、补码的基础知识。 我只要是对-32768的补码有疑惑,遂就只写这个了。
  • 补码=反码+1 以前学习二进制编码时,老师讲了一堆堆的什么原码啊反码啊补码啊xxxx转换啊,还有负数的表示方式啊 总是记不零清,终于从网上找到了一种比较好的讲解方式,保存再share一下,不过为了系统化讲解,又...
  • -128的补码 详解

    万次阅读 2019-03-11 04:36:45
    1)本博客所有内容均指在8位机器下的整数转换及表示; (2)-128的绝对值在无符号整型下的表示:128D = 1000 0000B; (3)溢出丢弃进位法则:在用有符号整型表示二进制数时,当后面的非符号位发生溢出时,符号...
  • 数据的机器表示–补码反码浮点数等 参考:《计算机系统基础》(袁春凤版) 工具 进制转换器 IEEE 754 单精度浮点数转换器 补码计算器 补码、反码 原码: 1个符号位 + 值位: 0为正数,1位负数 补码: 正数的...
  • -1的原码、反码、补码(0xff)

    千次阅读 2021-01-24 21:39:47
    -1的表示 1、0xff的无符号数为255,当作为有符号数显示则为-1。 2、-1的原码表示为1001;...加1补码:1111即0xff。 3、负数在计算机中用补码表示。 参考资料: c++ 2、机器数、真值、原码、补码、反码 ...
  • 汇编语言--补码

    2014-04-03 13:09:08
    以8位的数据为例,对于无符号数来说是从00000000b~11111111b到0~255一一对应...首先,我们可以考虑用8位数据的最高位来表示符号,1表示负,0表示正,而用其他位表示数值,如下:00000000b000000001b100000010b201111...
  • 问题就出在这个0处,因为对于+0的补码和-0的补码结果都一样,会使整体补码的个数比原码少1,于是可以让负数的位置上可以多表示一个整数的补码也就是-128的补码1000,0000(人为规定的)。同时对于无符号
  • -1补码以及无符号32位输出4294967295

    千次阅读 2015-01-26 16:16:48
    -1补码(32位)是0xffffffff(8个f)即2^23 -1 = 4294967295 string的搜索函数find,当搜索失败时返回nops(const string:size_type类型) 并初始化为-1 。因为nops是无符号类型,所以当搜索失败时输出的是...
  • -2147483648的补码是10000000 00000000 00000000 00000000 把数字都转换成补码的好处是减法可以当作加法计算: 1-1=1和-1补码进行加法计算(符号位也要当数字来计算)=00000000 00000000 00000000 00000001+...
  • 补码

    千次阅读 2018-08-13 11:50:38
    补码是 00 00 00 00; -0的原码是80 00 00 00;反码是 FFFFFFFF;补码是 00 00 00 00; 用补码表示时,+0和-0是相同的,符合正常认知。 二、 解释 2.1、 基础 由此引出计算机中补码的表示规则:正数和零暂不讨论...
  • 关于 -128 ,+128,-0,+0,-1 的反码补码

    万次阅读 多人点赞 2018-02-27 13:37:18
    一.反码的范围 反码表示法规定:正数的反码与其原码相同。负数的反码是对其原码逐位取反,但符号位除外。 在规定中,8位二进制码能表示的反码范围是-127~127。 -128没有反码。...那么,为什么规定-128...再看-128,[-1
  • 补码(-128的补码

    2021-03-16 16:16:44
    二进制的负数在计算机中采用补码的方式表示。很多人很好奇为什么使用补码,直接使用原码表示多好,看上去更加直观和易于计算。然而事实告诉我们,这种直观只是我们人类的一厢情愿罢了,在计算机看来,补码才是它们最...
  • 我们先举个例子 1个字节的数字7用二进制表示为 0000 0111,最高...而负数的二进制表示为补码(反码加1),反码只是过渡阶段 -7 我们由+7来推倒 1字节为例 +7 0000 0111 ==》1111 1000 ==》1111 1001 +7二进制 ...
  • -128的补码及原码、反码、补码

    千次阅读 2020-01-16 17:39:01
    用来表示有符号数,数的范围就是 -2^(n-1) ~ 2^(n-1)-1,n=8时,这个范围就是 -128 ~ +127。 用来表示无符号数,就不需要用一位来表示符号位,n位机器数全部用来表示是数值,这时表示数的范围就是0~2^n-1,n=8时这...
  • -128的补码解释

    万次阅读 多人点赞 2018-01-22 17:12:55
    作者:何新宇 ... 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非...补码、负数和减法,尽管不是很对题,但依然希望能给题主带来帮助 --- 背景 复习c++的时候遇到二进制编码问题,上网搜索了
  • 关于补码1.0000的真值为什么是-1的解答

    千次阅读 多人点赞 2021-01-29 20:43:20
    =-1时,补码的定义为[x]补=2+x也就是说真值x=[x]补-2,所以当补码等于1.0000时,x=1.0000-2=-1,因此,证明得到补码1.0000的真值为-1。 最后解释一下为什么这里不能用按位取反,末尾加一的原则进行
  • 有符号二进制数--补码

    千次阅读 2017-06-20 17:31:30
    有符号二进制数原码,反码,补码
  • 1、数据的存储形式 数据都是以补码形式存储 正数的补码是正数的本身 负数的补码 符号位不变 其它位数取反+1; 【例1】+9的补码是00001001。 【例2】求-5的补码。-5对应正数5(00000101)→所有位取反(11111010...
  • 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 首先复习一下补码。。这道题考的位运算 --> 位运算 计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,873
精华内容 30,349
关键字:

-1的补码