精华内容
下载资源
问答
  • 移码和补码

    千次阅读 2018-10-29 15:12:24
    计算机中的“数”,花样很多,又是ASCII码、又是BCD码等等,下面,做而论道写了一些关于移码补码的一些看法,欢迎拍砖。 机器数 计算机中的“数”,其实都不是数字,它们都是一些高、低电平。 其中,高电平为3.2...

    版权声明:本文为博主原创文章,未经博主允许不得转载。    https://blog.csdn.net/baidu_33836580/article/details/50578828
    计算机中的“数”,花样很多,又是ASCII码、又是BCD码等等,下面,做而论道写了一些关于移码、补码的一些看法,欢迎拍砖。

    机器数

    计算机中的“数”,其实都不是数字,它们都是一些高、低电平。
    其中,高电平为3.2~5.0V,记为1,低电平为0~0.3V,记为0。
    这些1、0,显然都不应该称为“数”,应该称为“数码”,称为“机器数”更合适一些。

    用8位“数码”,可以形成0000 0000 ~ 1111 1111 共 256 种不同的组合,用16进制表示就更简练一些,把它们像数字一样写在一个数轴上,如下图所示:

     


    无符号数

    用这些“机器数”代表人们常用的“数字”,还是很容易理解的,特别是无符号数 0 ~ 255,不用经过任何变换,直接对应就可以了,如下图所示:

     


    有符号数

    但是,用“机器数”代表“有符号数”,就要费些心思了,这也是被人弄的很滥的部分。

    8位二进制数共有 256 种组合,可以用 128 个代表负数,用128 个代表零和正数,那么“有符号数”的范围就是:-128 ~ -1 、0 ~ +127,画在数轴上如下所示:

     

     

    移码

    最简单的代表方式是“移码”。

    “移码”就是把所有的数字都加上 128,也就是把 -128 ~ +127 的范围的数字,都平移到 0 ~ 255 范围内,然后再用 0 ~ 255 的“机器数”来表示。

    当有符号数和机器数的对应关系如下图时,这就是“移码”:
     

     

    显而易见,机器数0 ~ 127 代表负数 -128 ~ -1,机器数128 ~ 255 代表 0 ~ 127。所有的数字都右移了128,大概这就是“移码”名称的来源吧。

    已知一个数 X,其 8 位字长的移码定义为:

        [X]移 = 128 + X                -128  <=  X  <=  127

    有兴趣的读者可以去查看计算机类的书籍,从中可以找到这个式子。

    移码,应用的场合还是很多的。多数AD转换器产生的数字,就是用移码表示采样数据的。另外在浮点数中,也有应用。

     

    补码

    移码虽然解决了表示负数的难题,但是它是把全部数字都向右边移动了 128,正数也都变大了,这就不方便进行数字的计算。
    为此,有人提出了“补码”的表示方式,即零和正数不用移动,只是把负数向右移动 256 个位置。

    关于补码的由来,可见:
    http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/d92cc986c2a1523bc75cc380.html

    下图就是补码中负数和机器数的对应关系:
     


    下图又加上了正数和机器数的对应关系:
     

     

    可见,机器数0 ~ 127 代表零和正数0 ~ 127,机器数128 ~ 255 代表负数 -128 ~ -1。

    已知一个数 X,其 8 位字长的补码定义为:

          /  X                                   0  <=  X  <=  +127 ;0和正数不用变化
      [X]补 = |
          \ 2 ^ 8 -| X |   =   256  +  X        -128 <= X < 0 ;负数就加256

    有兴趣的读者可以去查看计算机类的书籍,从中也可以找到这个式子。

    从定义式求一个数的补码是非常容易的:是正数就直接变成二进制,是负数先加上256(就变成128~255了)再变成二进制就完了。

    补码和移码的互换

    从前面的示意图中可以看出,在移码、补码中,仅仅是正数、负数交换了位置,而正数、负数中数字的次序并没有变。

    因为机器数0 ~ 127 的最高位都是0,机器数128 ~ 255 的最高位都是1,只要把这最高位变化一下,补码就可以变成移码,同样,移码也可以由此变成补码。
    --------------------- 
    作者:baidu_知道 
    来源:CSDN 
    原文:https://blog.csdn.net/baidu_33836580/article/details/50578828 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 比较补码、原码、移码及帅码制的表示方法与四则算术运算算法,分析各种码制的优缺点。同时分析字位扩展(8-16,16-32位)、运算溢出、大小比较等的方法。算法推导证明(如果手写则拍照上交)计算机程序模拟,程序只可用...
  • 原码、反码、移码补码 原码 也叫 符号绝对值码 最高位0表示正数,1表示负数,其余二进制位是该数字的绝对值的二级制位 原码较为简单,但是加减运算复杂 存在加减乘除四种运算,增加了CPU的复杂度 0的...

    原码、反码、移码、补码

    原码

    • 也叫 符号绝对值码

    • 最高位0表示正数,1表示负数,其余二进制位是该数字的绝对值的二级制位

    • 原码较为简单,但是加减运算复杂

    • 存在加减乘除四种运算,增加了CPU的复杂度

    • 0的表示不唯一

    反码

    • 正数的反码等于原码

    • 负数的反码是其原码除符号位外,按位取反

    移码

    • 移码表示数值平移n位,n为移码量

    • 移码主要用于浮点数的阶码的存储

    补码

    • 已知十进制求二进制

      • 求正整数的二进制

        • 除2取余,直至商为0,余数倒叙排列
      • 求负整数的二进制

        • 先求与该负数相对应的正整数的二进制代码
        • 在将所有位取反,末尾加1,不够位数,左边补1
      • 求0的二进制

        • 都是0
    • 已知二级制求十进制

      • 如果首位是0,则表明是正整数,按正常方法求

      • 如果首位是1,则表明是负整数,将所有位按位取反,末尾加1,所得数字为该负数的绝对值

      • 如果全是0,则对应的十进制数字就是0

    #include<stdio.h>
    int main()
    {
    	/*
    	***已知十进制求二进制 -5 
    	5的二进制是0101
    	取反:1010+1=1101 16进制表示为B 前面全1即7个F 
    	*/ 
    	int i = 0xFFFFFFFB;
    	printf("%d\n",i);
    	int j= -5;
    	printf("%#X\n",j);
    	
    	/*
    	已知二进制求十进制
    	1110101 前面全部补1来测试 :7个F 1个5 
    	取反
    	0001010+1=0001011 十进制为11
    	鉴于是1开头所以是-11 
    	*/ 
    	int m = 0XFFFFFFF5;
    	printf("%d\n",m); 
    	char ch = 129;
    	printf("%d\n",ch);  
         /*char占一个字节 8位
        8位最多存储011111111(127)+1 溢出
        = 10000000(-128)+1 
        10000001
        最高位为1,负数,取反+1
        =01111110+1
        =01111111(127)为该负数的绝对值
        该数为-127
        */
    }
    

    image-20200531211852444

    补充

    二进制十进制
    0000 00000
    0000 00011
    … …… …
    0111 1111127
    1000 0000-128
    1000 0001-127
    1000 0010-126
    … …… …
    1111 1111-1
    展开全文
  • 定点数的编码有原码,补码,反码,移码,   原码 原码是符号位的不同,正数符号位为0,负数符号位位为1,数值部分是不变化的,比如0的表示为0000(以4位说明),-0的表示为1000,1的表示为0001,-1的表示为1001...

    定点数的编码有原码,补码,反码,移码,

     

    原码

    原码是符号位的不同,正数符号位为0,负数符号位位为1,数值部分是不变化的,比如0的表示为0000(以4位说明),-0的表示为1000,1的表示为0001,-1的表示为1001,表示很简单而且也容易理解,但是这种编码有很多缺陷,比如

    1.0的表示不唯一,不利于编程;

    2.他的加减运算方式不统一,即不能用加法来表示减法,运算程度复杂

    3.需要对符号位进行处理,不利于硬件设计(目前还不够理解)

    4.尤其是当a<b时,a-b的实现将很困难。

    因此如今的整数都用补码表示,但是浮点数的尾数用原码定点小数表示。

     

    移码

    移码是将每一个数值加上一个偏置常数(bias),通常,当编码位数为n时,bias取2^(n-1)或者2^(n-1)-1(如在IEEE754)

    比如说n=4时,E(biased)=E+2^3

    比如-8 的-8(+8)~0000B

    在这种形式的编码中,0的编码是唯一的,当bias为2^(n-1)时,移码和补码只有第一位是相反的,

     

    移码的作用:用来表示浮点数的阶,这么做的原因是便于浮点数加减运算时的对阶操作,即比较大小

    比如:

    1.01*2^-1+1.11*2^3

    如果用补码来表示阶数,则-1的补码在机器中是111,3的补码是011,在机器中直接比较是111>011,不符,

    而用移码可以解决这个问题,移码的-1表示为011(3),而3的表示为111(7),符合实际,

    补码

    首先先掌握一个重要概念,在一个m模运算系统中,一个数与它除以模后的余数等价

    比如在模12系统中,-4和8,10-4=10+8(mod12)

    -4=8(mod12)

    则8是-4对模12的补码,

    由此可以得出两个结论,一个负数的补码等于模减该负数的绝对值。

    对于某一确定的模,某数减去小于模的另一个数,总可以用该数加上另一数负数的补码来代替。

    补码达成了+和-的统一,

    9828-1928

    =9828+(10^4-1928)

    =9828+8072

    = 17900

    =7900(mod 10^4)

    而计算机中的运算器是模运算系统,

    在八位二进制加法器模运算系统中,[-0100 0000]的补码为=(2^8- 0100 0000)=1100 0000,可以直接计算,也可以记住一个规律

    即一个负数的补码等于将对应正数的补码各位取反,末位加一,也可以说是从右向左遇到的第一个1的前面各位取反。

    以下展示一个利用补码将减法化为加法的例子:

    0111 1111-0100 0000=0111 1111+(2^8-0100 0000)=0111 1111 + 1100 0000=1 0011 1111(mod2^8)=0011 1111

    运算器是只有有限位的,假设为n位,则运算结果只能保留到n位,模为2^n

    假设补码有n位,则有

    [X]补= 2^n + X (-2^n≤X<2^n ,mod 2^n)

    补码为正数,则符号位为0,补码为负数,则符号位为1;

    X是真值,[x]补是机器数,真值是现实生活中的值,

    而机器数是在机器里面用补码表示的值。

    然后,还有一个变形补码,

    在补码的运算中,中间结果可能会溢出,因此产生了变形补码,变形补码为双符号位,作用就是存放可能溢出的中间结果,

    比如四位二进制数,

    首先,变形补码的最高位总是表示正确的符号,比如00作为符号位表示正数,01表示正溢出,即上溢,11表示负数,10表示负溢出,即下溢,

    反码

    反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

    展开全文
  • 首先介绍一下什么是原码,反码,移码以及补码。 原码:首先把一个数转成二进制的表达方式,然后把这个二进制的首位用0或1表示,0表示正数,1表示负数 反码、补码指的是:一种计算机中对数字的二进制定点表示方法。...

    首先介绍一下什么是原码,反码,移码以及补码。

    原码:首先把一个数转成二进制的表达方式,然后把这个二进制的首位用0或1表示,0表示正数,1表示负数

    反码、补码指的是:一种计算机中对数字的二进制定点表示方法。首位是符号位(0表示正数,1表示负数)

    移码指的是:用来做浮点运算的接码,在补码的基础上,把首位做取反,在移码中,符号位0代表负数,1代表正数。

     数值1数值-11-1

    原码

    1-1-2
    反码1- 
        
           

     

     

     

                                                                                                                                                                                                                                                         

    正数-------------符号位:0
    负数-------------符号位:1
    所以正1,原码为0000 0001
    负一,原码就是1000 0001 


    正数:
    原码的反码和补码都与原码相同,
    负数:
    反码,先把符号位提取出来(不变),然后其余的位置按位取反(0变1,1变0)
    补码,在原来反码的基础上加一,

    表示的取值范围
    n表示位数,在规定位数内,可以表示的范围求解

    展开全文
  • 在IEEE754标准下浮点数如何用二进制数表示以及为什么用移码代替补码 一、浮点数用二进制数表示 1、补充:十进制数0.4如何转化为二进制数0110 0110(0110循环) float精度有限精确到6~7位 2、、 符号位,位于存储...
  • 移码补码原理

    2020-05-02 17:40:12
    计算机中的“数”,花样很多,又是ASCII码、又是BCD码等等,下面,做而论道写了一些关于移码补码的一些看法,欢迎拍砖。机器数计算机中的“数”,其实都不是数字,它们都是一些高、低电平。其中...
  • 原码、反码、补码和移码其实很简单

    万次阅读 多人点赞 2012-04-05 21:08:32
    最近在备战软考,复习到计算机组成原理的时候,看到书中关于原码、反码、补码和移码的定义如下(n是机器字长): 原码: 反码: 补码: 移码: 看完这些定义以后,我的脑袋瞬间膨胀到原来的...
  • 计算机补码移码

    2020-07-05 15:51:05
    一个8位机器数的计算机如何存储记录123-123的移码和补码呢? 2的7次方等于128 123的补码运算 (因为存在进位,超过计算机的表达位数, 所以进位舍去,即正数的补码还是其原码) 123的移码运算 移码主要将一...
  • ????补码表示法 1.补的概念 取反加一 2.正数的补数即为其本身 ...移码表示法 ...3.真值、补码和移码的对照表 4.移码的特点 能方便地判断浮点数的接码大小 学习资料来源: 计算机组成 刘宏伟老师 哈工大 ...
  • 软考之补码和移码

    2020-05-23 11:18:07
    软考遇到了补码和移码的小疑惑,解决了,现在来分析一下解决思路。 二:操作 1.为什么补码和移码的0都等于它本身呢? 首先,写一个0的原码、反码、补码、移码 数值 +0 -0 原码 00000000 10000000 反码 ...
  • 原码 反码 补码 移码

    2021-03-03 21:45:22
    移码补码符号位取反,1变0,0变1 例: 真值 +01001000 (非IEEE754标准) 原码 001001000 反码 001001000 补码 001001000 移码 11001000 真值 -0000100 (非IEEE754标准) 原码 10000100 反码 11111011 补码 ...
  • 原码、反码、补码和移码

    千次阅读 2018-11-13 10:44:08
    书中关于原码、反码、补码和移码的定义如下(n是机器字长): 原码: 反码: 补码: 移码: 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个...
  • 补码反码移码

    2020-06-12 09:20:11
    补码反码移码
  • 主要介绍了C语言基础 原码、反码、补码和移码详解的相关资料,需要的朋友可以参考下
  • 一、原码、反码、补码和移码的一般求法 码制 一般求法 原码 符号位用0表示正数,1表示负数,其余位不变。 反码 正数的反码与原码一样,负数的反码是对它的原码(除符号位外)各位取反。 补码 正数的补码...
  • 一、原码 用机器数的最高位表示该数的符号,其余的各位表示数的绝对值 二、反码 纯小数反码 ...三、补码 ...补码的优点是:易于进行加减运算 ...纯小数补码 ...纯整数补码 ...同一个真值的移码和补码仅...
  • 补码移码笔记

    2020-04-29 15:54:20
    补码移码、浮点数小结,知识来源网络收集加自身理解
  • 对于任何一个真值A,它对应的补码为B、移码为C,如果BC位数相同,则BC的符号位(最高位)刚好相反,其余各位均相同。 大家如何看待这个结论?? 正确, 错误, 还是不一定??? 我的回答: 举例1 正数A=0011 ...
  • 原码、反码、补码和移码的公式归纳最近在备战软考,复习到计算机组成原理的时候,看到书中关于原码、反码、补码和移码的定义,特归纳如下(其中,n是机器字长):原码:X 0 ≤ X ≤ 2n-1 -1若X是纯整数,则[X]原 = 2n-...
  • 移码 原码 :二进制(开头第一个表示符号0正1负) 反码 :在原码的基础上,符号位不动,其他位取反 ---注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。 补码 :在反码的基础上,运算+1 ---注意,任何...
  • 原码、补码移码

    千次阅读 2020-07-23 22:37:13
      定点数的编码有:原码、补码移码、反码(用得少) 原码   原码就是符号位用0与1来表示,剩下的数表示数值。对于4位二进制数的原码表示方法中,0即可以用1000表示,也可以用0000表示。用原码表示数值的缺点...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,370
精华内容 1,748
关键字:

移码和补码