编码世界探秘:原反补码与实数表示,含定点、浮点及BCD编码

数值的编码表示

整数编码表示

在计算机中,因为只有01这两种形式,但为了表示数的正(+),负(-)号,就要将数的符号以01编码。

通常把一个数的最高位定义为符号位,用0表示正,1表示负,称为数符,这种把数本身(数值部分)及符号一起数字化的数称为机器数。

机器数是数在计算机内的表示形式,而这个数真正表示的数值称为真值

假设计算机字长为8,然后介绍它的原码、反码和补码

原码

整数 X 的原码指其数符位 0表示正,1表示负。其数值部分就是X绝对值的二进制表示。

通常用 [X]表示X的原码

示例:

  • [ +1 ]=00000001 [ +127 ]=01111111
  • [ -1 ]=10000001 [ -1 ]=11111111

由此可知,8位原码表示的最大值为27-1,即是127,最小值为—127,所能表示数的范围为[-127,127]

当采用原码表示时,编码简单,与真值转换方便。但原码也存在以下一些问题

  • 在原码表示中,0有两种表示形式,即 [ +0 ]=00000000,[ -0 ]=10000000。零的二义性给机器判断带来了麻烦
  • 原码进行四则运算时,符号位需要单独处理,增加了运算规则的复杂性

反码

整数X的反码指对于正数,与原码相同;但对于负数,数符位为1,其数值位是X的绝对值取反。通常用 [X ]表示 X 的反码

示例:

  • [ +1 ]=00000001 [ +127 ]=01111111
  • [ -1 ]=11111110 [ -127 ]=10000000

由此可知,8位反码表示的最大值、最小值和所能表示数的范围与原码相同

反码运算也不方便,很少使用,一般用作求补码的中间码

补码

正数 X 的补码指对于正数,与原码、补码相同;但对于负数,数符位为1,其数值位是X的绝对值取反后再在最低位加1,即为反码加1

通常用 [ X ]表示 X 的补码

示例:

  • [ +1 ]=00000001 [ +127 ]=01111111
  • [ -1 ]=11111111 [ -127 ]=10000001

在补码表示中,0有唯一的编码,即[ +0 ]=[ -0 ]=00000000,因而可以用多出来的一个编码10000000来扩展补码所能表示的数值范围,即将负数由最小-127扩大到-128。这里的最高位1即可看作符号位,又可表示为数值位,其值即为-128,补码所能表示数的范围为[-128,127]。这就是补码与原码、反码最小值不同的原因。利用补码可以方便地进行运算

总结

对于正数 X:[ X ]=[ X ]=[ X ]

对于反数 Y:

  • [ Y ]=数符位为1,其他位为绝对值的二进制形式;
  • [ Y ]=数符位为1,其余位按位取反
  • [ Y ]=[ Y ]+1

实数编码表示

在计算机中小数点是不占位置的,因此规定根据小数点所在的位置来表示,分别为定点整数、定点小数和浮点数这三种表示形式

定点整数

定点整数是纯整数,是指在计算机内部表示时,小数点被固定在机器数的最右边。定点整数可分为有符号数和无符号数(正整数)。

  • 有符号数最高一位二进制表示符号(0表示正号且1表示负号),其余各位表示数据。

  • 不带符号位时所有的二进制位数都用来表示数据

在这里插入图片描述

无符号整数的表示

字长为n位的计算机,它能表示的无符号整数的范围是0~2n-1

字长为8位的计算机,它的整数范围是:0~255(00000000B~11111111B)

字长为16位的计算机,它的整数范围是0~65535(0000000000000000B~1111111111111111B)

有符号整数的表示

字长为n位的计算机,它能表示的有符号整数的范围是-2n-1~2n-1-1

最高位表示符号,0表示正号(+),1表示负号(-),其余用来表示数值部分。

数值部分的表示方法

  • 原码表示

    整数的绝对值以二进制自然码表示

    如字长为8位的计算机中,[ +20 ]=00010100 [ -20 ]=10010100

    字长为n位的计算机,能表示的有符号整数的范围是-2n-1~2n-1-1

    字长为8位的计算机,有符号整数的范围是:-127~+127(10000000B~01111111B)

    字长为16位的计算机,有符号整数的范围是:-32767~+32767.

  • 补码表示

    正整数的绝对值以二进制自然码表示,负整数的绝对值使用补码表示

    [ +20 ]=00010100 [ -20 ]=11101011

定点小数

定点小数是纯小数,是指在计算机内部中固定小数点位置在符号位与有效数值部分之间。

所有数绝对值均小于1

在这里插入图片描述

浮点数

所谓浮点数是指小数点位置不固定的值。定点数表示的数在实际应用中是不够用的,尤其在科学计算中。为了能表示非常大或非常小的数,采用浮点数表示。

浮点数主要由符号位(正负)阶码尾数(有效数字)这三个部分组成:

  • 符号位:用来表示数值的正负,通常是最高位的数码,0表示正数,1表示负数
  • 阶码(指数):用定点整数来表示,存储实际指数值,阶码所占的位数确定了数的范围
  • 尾数:用定点小数表示,存储小数部分的有效数字。尾数所占的位数确定了数的精度

如:-0.2368*10+3,其中-是符号位,0.2369是尾数,+3是阶码(尾数)

浮点数的表示方法和科学计数法相似,任意一个数均可通过改变其指数部分,使小数点发生移动,如十进制数23.89可以表示为2.368x101、0.2368x102、0.02368x103等。

在计算机中,浮点数的一般表示形式为N=2ExD,其中,D称为尾数,E称为阶码。

BCD编码

BCD(Binary-Coded Decimal,二进制编码的十进制)是一种将十进制数以二进制形式编码的方法,它确保每一位二进制编码仅能表示0到9之间的单个十进制数字。

当十进制小数转换为二进制数时会产生误差,为了精确地存储和运算十进制数,可用若干位二进制数码来表示一位十进制数,称为二进制编码的十进制数。

BCD编码的主要目的是为了简化计算机系统中十进制数据的处理,尤其是对于那些需要精确十进制表示的应用场景,比如金融和会计系统

在BCD编码中,一个十进制位通常用4位二进制来表示,因为2的4次方等于16,而10进制数正好在0到9这个范围内。BCD码可分为8421码(从高位到低位的权值分别为8、4、2、1)、2421码(从高位到低位的权值分别为2、4、2、1)、5421码(从高位到低位的权值分别为5、4、2、1)等。8421最基本的,最常用的BCD码。

8421该怎么计算?

示例:用8421法将十进制5转换为二进制数

按照8421来分解5:5=4+1

用8421转换法,对应数字的下面写1,没有的写0,得到:
在这里插入图片描述

所以:5D=0101B

常用BCD码与十进制数的对应关系如表1-11所示

十进制数8421码5421码2421码
0000000000000
1000100010001
2001000100010
3001100110011
4010001000100
5010110001011
6011010011100
7011110101101
8100010111110
9100111001111

如果要表示更大的十进制数,只需将每个十进制位转换为相应的BCD码,并按顺序排列起来。例如,十进制数123可以表示为:

  • 十进制数 1 对应的 BCD 码是:0001
  • 十进制数 2 对应的 BCD 码是:0010
  • 十进制数 3 对应的 BCD 码是:0011

所以,十进制数123的BCD编码就是:0001 0010 0011。

使用BCD编码的优点在于可以直接读取并理解其表示的十进制数值,避免了二进制与十进制之间转换时可能引入的精度损失。然而,相对于原生二进制表示,BCD编码占用的空间较大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/455492.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zephyr NRF7002 实现AppleJuice

BLE的基础知识 ble的信道和BR/EDR的信道是完全不一样的。但是范围是相同的,差不多也都是2.4Ghz的频道。可以简单理解为空中有40个信道0~39信道。两个设备在相同的信道里面可以进行相互通信。 而这些信道SIG又重新编号: 这个编号就是把37 38 39。 3个信道…

Python中的while循环,知其然知其所以然

文章目录 while循环结构1.用循环打印1 ~ 100步骤解析2. 1 ~ 100的累加和3.死循环1. 用死循环的方法实现 1 ~ 100累加和 4. 单向循环(1)打印 一行十个小星星*(2)通过打印一个变量的形式,展现一行十个小星星(3)一行十个换色的星星 ★☆★☆★☆★☆★☆(4)用一个循环,打印十行十列…

5、从 CSV 到 ChatGPT 的完整分析报告,只需 5 个简单步骤

从 CSV 到 ChatGPT 的完整分析报告,只需 5 个简单步骤 数据分析是一项耗时的活动。使用 ChatGPT,我们可以在短时间内进行数据汇总、数据预处理、数据可视化等。 无论您从事什么行业,在数据驱动时代,知道如何分析数据比以往任何时候都更加重要。数据分析将使企业能够保持竞…

【C语言 - 哈希表 - 力扣 - 相交链表】

相交链表题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意&#xff0…

【VTKExamples::PolyData】第二十期 ImplicitModeller

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例ImplicitModeller技术,并解析接口vtkImplicitModeller,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. I…

JVM 性能调优 - JVM 参数基础(2)

查看 JDK 版本 $ java -version java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode) 查看 Java 帮助文档 $ java -help 用法: java [-options] class [args...] …

Java基础(二十四):网络编程

Java基础系列文章 Java基础(一):语言概述 Java基础(二):原码、反码、补码及进制之间的运算 Java基础(三):数据类型与进制 Java基础(四):逻辑运算符和位运算符 Java基础(五):流程控制语句 Java基础(六)&#xff1…

电脑服务器离线安装.net framework 3.5解决方案(错误:0x8024402c )(如何确定当前系统是否安装NET Framework 3.5)

问题环境: 日常服务的搭建或多或少都会有需要到NET Framework 3.5的微软程序运行框架,本次介绍几种不同的安装方式主要解决运行在Windows 2012 以上的操作系统的服务。 NET Framework 3.5 是什么? .NET Framework是微软公司推出的程序运行框架…

Web html和css

目录 1 前言2 HTML2.1 元素(Element)2.1.1 块级元素和内联(行级)元素2.1.2 空元素 2.2 html页面的文档结构2.3 常见标签使用2.3.1 注释2.3.2 标题2.3.3 段落2.3.4 列表2.3.5 超链接2.3.6 图片2.3.7 内联(行级)标签2.3.8 换行 2.4 属性2.4.1 布尔属性 2.5 实体引用2.6 空格2.7 D…

Android Studio导入项目 下载gradle很慢或连接超时

AS最常见的问题之一就是下载gradle非常慢,还经常出现下载失败的情况,没有gradle就无法build项目,所以一定要先解决gradle的下载问题,下面教大家两种常用方法 手动下载压缩包并替换 1、关闭Android Studio,复制下面的网…

TS项目实战二:网页计算器

使用ts实现网页计算器工具,实现计算器相关功能,使用tsify进行项目编译,引入Browserify实现web界面中直接使用模块加载服务。   源码下载:点击下载 讲解视频 TS实战项目四:计算器项目创建 TS实战项目五:B…

为后端做准备

这里写目录标题 flask 文件上传与接收flask应答(接收请求(文件、数据)flask请求(上传文件)传递参数和文件 argparse 不从命令行调用参数1、设置default值2、"从命令行传入的参数".split()3、[--input,内容] …