编码世界探秘:原反补码与实数表示,含定点、浮点及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.mfbz.cn/a/372606.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【实训】网络规划与部署实训

一 实训目的及意义 本周实训主要是了解网络规划与部署,熟悉三大厂商华为、思科、锐捷交换机路由器以及相关协议的原理和配置,提高学生的动手能力和分析规划部署能力。 实训主要针对计算机网络系统集成的设计与实现的实际训练,着重锻炼学生熟练…

【节选】Go语言的100个错误使用场景|数据类型

Data types 🌟 章节概述: 基本类型涉及的常见错误 掌握 slice 和 map 的基本概念,避免使用时产生 bug 值的比较 低效的切片初始化(#21) 实现一个 conver 方法,将一个切片 Foo 转换成另一个类型的切片 Ba…

Go 中如何解析 json 内部结构不确定的情况

本文主要介绍的是关于 Go 如何解析 json 内部结构不确定的情况。 首先,我们直接看一个来提问吧。 问题如下: 上游传递不确定的json,如何透传给下游业务?比如,我解析参数 {"test": 1,"key": {&…

【MATLAB源码-第136期】基于matlab的变色龙群优化算法CSA)无人机三维路径规划,输出做短路径图和适应度曲线

操作环境: MATLAB 2022a 1、算法描述 变色龙群优化算法(Chameleon Swarm Algorithm,CSA)是一种新颖的群体智能优化算法,受到自然界中变色龙捕食和社交行为的启发。变色龙以其独特的适应能力而著称,能够根…

《爬虫职海录》卷二 • 爬在广州

HI,朋友们好,「爬虫职海录」第二期更新啦! 本栏目的内容方向会以爬虫相关的“岗位分析”和“职场访谈”为主,方便大家了解一下当下的市场行情。 本栏目持续更新,暂定收集国内主要城市的爬虫岗位相关招聘信息&#xf…

360,这次你真行:流氓耍到外国佬身上,凌晨1点让我笑岔气

天下,苦流氓软件久矣 在数字世界中,我们常常遭遇一些令人头疼的问题,其中尤以大厂软件的牛皮癣特性为甚。这些软件不仅捆绑安装广告推广,而且手段无所不用其极,让用户感到无可奈何。 在此,我不得不提及四…

[C语言] 指针详解(1)

一. 指针 利用指针,可以找到相对应内存地址(唯一的一段编号),从而定位数据. (通俗来说,指针就是变量,用来存放内存单元的地址) 保存一段 16进制的 地址编号 二、指针类型/变量: 类型: 基础类型* 如: int* char*指针变量: int* pa pa就为指针变…

广度优先求有向图-图中点的层次-BFS宽搜

代码如下&#xff1a; #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N 1e5 10; int e[N], ne[N], h[N], idx; int d[N], q[N]; //d用来存储每个位置到1号点的距离&#xff0c;q用来做模拟队列将符合条件的结…

CAN总线接口–硬件

8.3 CAN总线接口–硬件 虽然CAN总线目前已应用于工业控制、机器人、医疗器械等领域&#xff0c;汽车控制领域是CAN总线的最大市场。保守地估算&#xff0c;按每辆车30个CAN网络节点&#xff0c;2019年全球汽车产量约9100万辆&#xff0c; 即27.3亿个CAN网络节点。在汽车领域&am…

13.rk3588搭建rknn环境

一、搭建Anaconda3环境 首先下载Anaconda3-2022.10-Linux-aarch64.sh&#xff0c;链接&#xff1a;https://pan.baidu.com/s/10oXSAaleAEoe6KaJ3IQyaw &#xff0c;提取码&#xff1a;mtag 。 下载后放入到自己的home文件夹下面&#xff0c;然后在该文件夹下运行 bash Anaco…

34 使用 LNMP 架构部署动态网站环境

源码包程序 LNMP 动态网站部署架构 LNMP 动态网站部署架构是一套由 Linux Nginx MySQL PHP 组成的动态网站系统 解决方案。 1. 准备工作 在使用源码包安装服务程序之前&#xff0c;首先要让安装主机具备编译程序源码的环境。这需要 具备 C 语言、C语言、Perl 语言的编译器&…

Python:流程控制

4.1 顺序结构 在任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序从上到下一行行地执行&#xff0c;中间没有任何判断和跳转。 如果Python程序的多行代码之间没有任何流程控制&#xff0c;则程序总是从上往下依次执行&#xff0c;排在前面的代码先执行&#xf…

Failed at the chromedriver@2.27.2 install script.

目录 【错误描述】Failed at the chromedriver2.27.2 install script. npm install报的错误 【解决方法】 删除node_modules文件夹npm install chromedriver --chromedriver_cdnurlhttp://cdn.npm.taobao.org/dist/chromedrivernpm install 【未解决】 下载该zip包运行这个&…

RK3568驱动指南|驱动基础进阶篇-进阶7 向系统中添加一个系统调用

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

Matplotlib 绘图实践:从基础到高级技巧【第62篇—python:Matplotlib绘图】

文章目录 Matplotlib绘图模块基础入门大全1. 安装Matplotlib2. 绘制基本图形3. 自定义图形样式4. 多子图布局5. 高级绘图技巧6. 绘制实时动态图7. 图形注释与标记8. 颜色映射与散点图9. 绘制直方图10. 绘制饼图11. 绘制热力图 总结 Matplotlib绘图模块基础入门大全 Matplotlib…

字符串哈希模版(来自TsReaper)

有一个字符串word,让你求出某一段所对应的数值&#xff08;即映射值&#xff09;&#xff0c;word[L,R]对应的数值。

【LeetCode: 239. 滑动窗口最大值 + 滑动窗口 + 单调队列】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

rhel8静态ip配置

1.先cd进来 2.把默认的dhcp改成static IPADDR192.168.211.22 22随意改&#xff0c;255以下的数字都行&#xff0c;1和255不要用 GATEWAY192.168.211.2和虚拟机默认网关保持一致 重启网络 nmcli c reload和 nmcli c up ens160 ping百度测试--&#xff08;成功了&#xff0…

dnslog在sql盲注

首先必须保证sql是在windows下 因为需要使用到UNC路径 保证mysql中的secure_file_priv为空 secure_file_priv为null&#xff0c;load_file则不能加载文件。 secure_file_priv为路径&#xff0c;可以读取路径中的文件&#xff1b; secure_file_priv为空&#xff0c;可以读取磁盘…

ShardingSphere 5.x 系列【5】Spring Boot 3 集成并实现读写分离

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 使用限制3. 案例演示3.…
最新文章