吐槽:最近在学中国大学MOOC的一门课程《计算机系统基础(一)》,初学感觉对这些乱七八糟的码比较纠结,所以写个辨析,希望帮自己理清概念也希望帮到其他初学者。ps:纯属手敲和个人理解,不过有参考资料,如有错误希望大佬可以指出哈~

参考资料:MOOC、百度百科和其他人写的博客。

正文:

1、真值

真值可以理解为真正的值,一般用十进制表示,也可以用二进制表示。(其他进制表示的也有就是少而已)

举例:-85,100,-100,0

2、机器数

一个数在计算机中的二进制表示形式,而且是带符号的,0为正数,1为负数。

举例:10111,01111,011

在32位机器中,int、short、char型数据的机器数各占32位、16位、8位。

机器数与真值的关系:带符号位的机器数的真正数值为真值。

举例:机器数10111对应的真值为-7,也可为-0111B(二进制最好结尾写个B,不然不好区分,有时候会引起误会)

根据小数点的位置固定与否,机器数分为:定点数与浮点数。

小数点约定在固定位置的数称为定点数,小数点约定为可浮动的数称为浮点数。

因为X = (-1)^S * M * R^E

其中:S取值为0或1,用来约定X的符号;E为二进制定点整数,称为X的阶或指数;M为二进制定点小数,称为X的尾数;R为基数,一般为2、4、16等,2最常用。确定S、E、M三个数就可以确定浮点数X的值。

所以两者的关系是:浮点数可以由定点数得到。

以下介绍的由0/1序列表示的都是机器数的不同表示形式。

3、原码(从50年代开始,浮点数的小数用原码定点小数表示)

原码的表示:正数用0来表示,负数用1来表示,数值部分不变。

举例:0可表示为0000,-0为1000,-7为1111,5为0101(在此举例皆为4位原码)

缺点:0的表示不唯一,不利于编程;加减运算方式不统一,同号的数要比较绝对值才能做减法;额外的符号位不利于硬件设计。

用途:浮点数的小数用原码定点小数表示。

4、反码(不常用)

反码的表示:正数的原码是它本身;负数的原码是在其原码的基础上符号位不变,其余各位取反。

举例:+1的8位反码为00000001,-1的8位反码为11111110(-1的8位原码是10000001)

出现原因:反码的出现是为了解决原码做减法的问题。

缺点:无法解决0的表示不唯一的问题。

5、补码(从50年代开始,整数都用补码表示)

补码的定义:假设补码有n位,则[X]补 = 2^n + X(-2^n ≤ X<2^n,mod 2^n)(其中,X为真值,[X]补是机器数)

补码的表示:正数的补码就是它本身;负数的补码是在其反码的基础上+1得到的(即取反加一)。

举例:+1的8位补码为00000001,-1的8位补码为11111111(-1的8位反码是11111110)

相关结论:

1)一个负数的补码等于模减该负数的绝对值。

比如:-4的模12补码等于8

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

比如:9828 - 1928 = 9828 + (10^4 - 1928) = 9828 + 8072 = 17900 = 7900(mod 10^4)

3)一个负数的补码等于将对应正数补码各位取反、末位加1。

比如:-1000B的补码是00001000各位取反、末位加1即为11110111+1=111110000

求真值的补码:先将真值转换为二进制,正数取2^n的模,负数从右向左遇到第一个1的前面各位取反。

举例:设机器数有8位,123的补码表示为01111011,-123的补码表示为10000101

求补码的真值:符号位为0的正数,数值部分相同,符号位为1的负数,数值各位取反、末位加1。

举例:补码01010110的真值为86,补码11010110的真值为-42

出现原因:解决0的符号问题,统一表示;+和-的统一;能够多表示一个最低位(比如8位补码10000000可以表示-128)。

用途:整数用补码表示。运算器适合用补码表示和运算。

6、变形补码

变形补码(4‘s)的表示:双符号,用于存放可能溢出的中间结果。

举例:4位补码无法表示真值8,8的4位补码与-8的相同,均为1000,但变形补码不同,8的是01000,-8的是11000

用途:溢出的数可以同时保留符号位和最高数值位。

7、移码(用来表示浮点数的阶)

移码:将每一个数值加上一个偏置常数bias。

通常:当编码位数为n时,bias取2^(n-1)或2^(n-1)-1(当bias为 2^(n-1)-1 时,移码和补码仅第一位不同)

举例:E(biased) = E + 2^3(bias = 2^3 = 1000B)可以得到:-8(+8) ~ 0000B,0(+8) ~ 1000B

用途:移码用来表示浮点数的阶(便于浮点数加减运算时的对阶操作,比较大小)。

举例:1.01 * 2^(-1) + 1.11 * 2^3 中,运用移码可以简化比较:

将原式变为 1.01 * 2^(-1+4) + 1.11 * 2^(3+4) 就可以得到011(3)<111(7)

推荐阅读:(这些会帮助了解这些编码的来源与发展)

http://legendmohe.net/2013/08/22/补码、负数和减法/

https://www.zhihu.com/question/20159860/answer/71256667

补充:

18/12/27:有人给我推荐《计算机科学导论》,我看到了这个书里面关于这些码的详述,觉得非常清楚。

计算机中真值的概念,【概念辨析】真值、机器数、原码、反码、补码、变形补码、移码...相关推荐

  1. [例题详解]真值 机器数概念 | 原码 反码 补码 移码 概念及加减计算

    目录 真值和机器数 原码 反码 补码 移码 对比记忆 | 原 反 补 移码 加减法 | 原码 补码 结语 | 大学生学习复习资料 真值和机器数 真值:-5.+10 机器数(带符号数)(= 符号位 [0 ...

  2. 【原码, 反码, 补码的基础概念和计算方法】

    数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念. 原码就是符号位加上数字的二进制表示, 即用第一位表示符号, 其余位表示值. 反码的表示方法 ...

  3. 计算机组成原理——基本组成 进制转化 奇偶校验 原码 反码 补码 移码 移位 原码补码乘法除法 IEEE754 加法器ALU

    笔记来源于王道考研视频 第一章 通过电信号传递信息(低电平代表0,高电平代表1) 计算机系统 计算机系统=硬件+软件 软件 系统软件 应用软件 操作系统,数据库管理系统(DBMS),标准程序库(编程时 ...

  4. 关于计算机中 原码, 反码, 补码 详解

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  5. 二进制 真值 原码 反码 补码

    机器数: 一个数在计算机中二进制的表示形式叫机器数,机器数是带符号的 .计算机使用最高位来表示符号位 负数为1 正数为0.假如计算机的字长为8位 那么对于十进制3的机器数表示为0000 0011  , ...

  6. 原码反码补码的概念,以及原码反码的表示形式

    本文主要讲解计算机的原码, 反码和补码.的概念,以及原码反码的表示形式,以及原码反码补码之前如何相互转换,还有计算机中数字是怎么样存储的. 原码: 假设机器字长为n,原码(自然二进制码)是一种计算机中 ...

  7. 051_原码反码补码概念

    1. 反码的范围 1.1. 反码表示法规定: 正数的反码与其原码相同.负数的反码是对其原码逐位取反, 但符号位除外. 1.2. 在规定中, 8位二进制码能表示的反码范围是-127~127. 1.3. ...

  8. 计算机中的原码,计算机中的原码反码补码移码

    计算机中的原码反码补码移码 原码 数值 X 的原码记为 [X]原,如果机器字长为 n (即采用 n 个二进制位表示数据),则最高位是符号位,0 表示正号,1 表示负号,基余的 n~1 位表示数值的绝对 ...

  9. C语言中八进制和16进制怎么表示,原码,反码及补码,C语言按位取反运算符~

    借鉴被人的 C语言中8进制和16进制怎么表示 C语言本身支持的三种输入是: 1. 十进制.比如20,457: 2. 十六进制,以0x开头.比如0x7a: 3. 八进制,以0开头.比如05,0237 所 ...

  10. 计算机原码补码和反码的计算方法,一个数的原码,反码,补码怎么算,原码 反码 补码...

    数在计算机中是以二进制形式表示的. 数分为有符号数和无符号数. 原码.反码.补码都是有符号定点数的表示方法. 一个有符号定点数的最高位为符号位,0是正,1是副. 以下都以8位整数为例, 原码就是这个数 ...

最新文章

  1. TortoiseSVN在Windows下的使用
  2. ES6转ES5:Gulp+Babel
  3. EventStore文件存储设计
  4. 蓝桥杯c语言a组省赛试题及答案,2016-蓝桥杯-省赛-C语言大学A组全部真题.doc
  5. 消息框messagebox的使用
  6. java远程桌面连接不上_Java远程桌面调用失败
  7. JSP状态管理 及 Cookie实例
  8. poi导出excel报错Failed to read zip entry source
  9. 关于idea链接oracle数据库出现IO 错误: Got minus one from a read call, connect lapse 1 ms., Authen
  10. spring中创建excl表的几种方式并导出
  11. Python如何使用Continue语句?用法示例
  12. word中无法识别到e-study插件
  13. 计量经济学笔记6-Eviews操作-自相关的检验与消除(DW、LM检验与FGLS、广义差分变换)
  14. 心肺运动试验----各类参数分析笔记
  15. mysql占用cpu特别高的解决_mysql占用CPU过高的解决办法
  16. 我滴python第一周笔记
  17. C语言:实现三重缓冲区(附完整源码)
  18. Teager能量算子(TEO)_Python实现
  19. 数据结构实训-纸牌游戏
  20. 跨越2009之华为总裁任正非

热门文章

  1. bzoj2818: Gcd 莫比乌斯繁衍
  2. 有源电力滤波器APF MATLAB仿真 选阶补偿,matlab版本V2014,基于LCL滤波器的I型三电平拓扑仿真模型
  3. 如何实现一个简短的注册邀请码
  4. 1亿妹纸大姨妈的神器美柚:上云要切合业务需求,更要货比三家
  5. hiberfil文件的删除
  6. Shader——《真三国无双》城墙着火特效
  7. python3 租房信息
  8. Biotin-SNA,EBL;生物素化黑接骨木凝集素(SNA,EBL)
  9. vivado 使用DocNav查xilinx资料
  10. NUIST 9th 校赛 P4