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

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

相关文章

#Z0458. 树的中心2

题目 代码 #include <bits/stdc.h> using namespace std; struct ff {int z,len; }; vector<ff> vec[300001]; int n,u,v,w,dp[300001][2],ans 1e9; void dfs(int x,int fa) {for(int i 0;i < vec[x].size();i){ff son vec[x][i];if(son.z ! fa){dfs(son.z,…

保护个人信息安全,避免成为“互联网中的裸泳者”

⚽️ 一、互联网中的裸泳者&#x1f3c0; 二、代理 IP 的应用 - 解锁无限可能⚾️ 三、代理 ip 的几种类型 3.1 动态住宅代理&#xff08;Rotating Residential Proxy&#xff09;3.2 静态住宅代理&#xff08;Static Residential Proxy&#xff09;3.3 动态长效ISP&#xff08…

LLM之RAG实战(二十四)| LlamaIndex高级检索(三):句子窗口检索

这是本系列关于高级检索技术的第三篇文章&#xff0c;之前的两篇分别介绍构建基本的RAG和父文档检索技术&#xff0c;本文我们将深入研究句子窗口检索技术。我将介绍如何设置它&#xff0c;并使用TruEval来测量其性能&#xff0c;并将其性能与我们在前几篇文章中介绍的其他技术…

华清作业day52

代码&#xff1a; #include <stdlib.h> #include <stdio.h> typedef struct Node {char data;struct Node *lchild;struct Node *rchild; }*Tree; //申请空间 Tree create_space() {Tree t (Tree)malloc(sizeof(struct Node));if(NULL t){return NULL;}t->da…

深度神经网络中的BNN和DNN:基于存内计算的原理、实现与能量效率

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言引言内存计算体系结构深度神经网络&#xff08;DNN&#xff09;随机梯度的优…

中国好书2024推荐│《富而喜悦》唐乾九 片段节选

当你打开了这枚锦囊时&#xff0c;我为你感到骄傲&#xff0c;相信阅读至此&#xff0c;你已经比很多人更能了解如何过上富而喜悦的人生了。如果你不只是阅读&#xff0c;甚至已经把先前的内容带到生活中去见习过的话&#xff0c;此刻的你一定有更多的感触。我希望你能试着去组…

【Linux网络编程二】网络基础2(网络框架)

【Linux网络编程二】网络基础2&#xff08;网络框架&#xff09; 一.数据如何跨网络传输1.源ip和目的ip2.路由器的使命3.Mac地址的使命 二.网络通信的本质三.端口号1.存在意义2.实现原理 四.认识协议1.TCP协议2.UDP协议 五.网络字节序六.通用网络接口 一.数据如何跨网络传输 在…

【算法与数据结构】718、1143、1035、392、115、LeetCode最长重复子数组+最长公共子序列+不相交的线+判断子序列+不同的子序列

文章目录 一、718、最长重复子数组二、1143、最长公共子序列三、1035、不相交的线四、392、判断子序列五、115、不同的子序列六、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、718、最长重复子数组 思路分析&#xff1…

问题:下列哪些属于历史文化资源的特征( ). #学习方法#学习方法

问题&#xff1a;下列哪些属于历史文化资源的特征( ). A、稀缺性 B、脆弱性 C、可再生性 D、多样性 参考答案如图所示

C语言函数递归详解

递归是什么&#xff1f; 递归&#xff0c;顾名思义&#xff0c;就是递推和回归。 递归是一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是函数自己调用自己。 #include <stdio.h> int main() {printf("hehe\n");main();//main函数中⼜调⽤了main…

如何部署Linux AMH服务器管理面板并结合内网穿透远程访问

文章目录 1. Linux 安装AMH 面板2. 本地访问AMH 面板3. Linux安装Cpolar4. 配置AMH面板公网地址5. 远程访问AMH面板6. 固定AMH面板公网地址 AMH 是一款基于 Linux 系统的服务器管理面板&#xff0c;它提供了一系列的功能&#xff0c;包括网站管理、FTP 管理、数据库管理、DNS 管…

复旦大学NLP团队发布86页大模型Agent综述

复旦大学自然语言处理团队&#xff08;FudanNLP&#xff09;发布了一篇长达86页的综述论文&#xff0c;探讨了基于大型语言模型的智能代理的现状和未来。该论文从AI Agent的历史出发&#xff0c;全面梳理了基于大型语言模型的智能代理现状&#xff0c;包括LLM-based Agent的背景…

优秀学习网站推荐-第一辑

原文地址&#xff1a;https://jaune162.blog/2024/02/15/study-website-recommend Developer Roadmaps&#xff08;开发者路线图&#xff09; 官网地址&#xff1a;https://roadmap.sh/ 该网站包含了各个方向、各个语言的开发人员从零开始学习的路线图。 下图为Java方向的学…

Jenkins配置http请求github,发布release

学无止境&#xff0c;气有浩然&#xff01; Jenkins配置http请求github&#xff0c;发布release 前言Jenkins配置github配置在这里插入图片描述 打完收工! 前言 工作中进行了github迁移&#xff0c;原先的gitlab中配置的Jenkins的CI/CD步骤需要发布到Github发布release版本&am…

2024年人工智能可以报考的证书有哪些

人工智能&#xff08;AI&#xff09;是致力于解决通常与人类智能相关联的认知性问题的计算机科学领域&#xff0c;这些问题包括学习、创造和图像识别等。现代组织从各种来源收集大量数据&#xff0c;例如智能传感器、人工生成的内容、监控工具和系统日志。人工智能的目标是创建…

LeetCode:292.Nim 游戏

大一开学到现在&#xff0c;我不禁思考一个问题&#xff1a;代码重要吗&#xff1f; 我的答案是&#xff0c;根本不重要&#xff0c;或者说&#xff0c;是次要的。我认为分析问题&#xff0c;和画图是写题的开始&#xff0c;方法的学习&#xff0c;和灵活运用是目的。代码从来…

贪心算法篇2

“星辰野草&#xff0c;造出无边的天地~” 最⻓递增⼦序列 (1) 题目解析 (2) 算法原理 class Solution { public:int lengthOfLIS(vector<int>& nums) {// 使用dp int n nums.size(), ret 1;// 初始化为1vector<int> dp(n1,1);// 从第二个位置…

Spring速成(二)

Spring速成&#xff08;二&#xff09; 掌握IOC/DI配置管理第三方bean掌握IOC/DI的注解开发掌握IOC/DI注解管理第三方bean完成Spring与Mybatis及Junit的整合开发 1&#xff0c;IOC/DI配置管理第三方bean 1.1 案例:数据源对象管理 1.1.1 环境准备 学习之前&#xff0c;先来准…

LFU缓存(Leetcode460)

例题&#xff1a; 分析&#xff1a; 这道题可以用两个哈希表来实现&#xff0c;一个hash表&#xff08;kvMap&#xff09;用来存储节点&#xff0c;另一个hash表&#xff08;freqMap&#xff09;用来存储双向链表&#xff0c;链表的头节点代表最近使用的元素&#xff0c;离头节…

Deepin系统安装x11vnc远程桌面工具实现无公网ip访问本地桌面

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具&#xff0c;它的原理是通过X Window系统的协议来实现远程桌面的展…