计算机算法中的数字表示法——原码、反码、补码

目录

  • 1.前言
  • 2.研究数字表示法的意义
  • 3.数字表示法
  • 3.1 无符号整数
  • 3.2 有符号数值
  • 3.3 二进制补码(Two's Complement, 2C)
  • 3.4 二进制反码(也称作 1 的补码, One's Complement, 1C)
  • 3.5 减 1 表示法(Diminished one System, D1)
  • 3.6 原码、反码、补码总结

1.前言

昨天有粉丝让我讲解下定点数和浮点数,本来这部分是打算在FPGA入门系列的最后面来讲的。作者想开的系列真的很多,比如开发FPGA需要学会相关软件Matlab、Vivado、ModelSim等等的使用,每个软件做一个系列;FPGA入门教程做一个系列;基础数字信号处理做一个系列;通信相关的系列;IP核使用详解系列;FPGA数字积木系列(自己设计的一些参数化IP)。但是这些无疑都会花大量的时间去构思和整理资料,会出的比较慢,请读者耐心等待。

这篇文章就先介绍定点数和浮点数的概念,因为要真正讲清楚还得从原码、补码和反码开始讲起。要仔细研究的建议去多看看相关书籍,讲清楚原理之后再讲Matlab里面计算的浮点数怎么转换为定点数到FPGA里面进行使用,以及FPGA里面计算的定点数,怎么在Matlab里面又转换为浮点数。

这里需要重点强调的是,原理虽然很枯燥,但是真的很重要,是绝对不能忽视的,如果原理弄的一知半解,就开始去做处理,后期该踩得坑一个也少不了。

2.研究数字表示法的意义

在计算机算法中,有两个基本设计准则是非常重要的:分别是数字表示法和代数运算的实现。例如:定点数或浮点数就是常用且可行的数字表示法。一些基本的运算,像加法器和乘法器,更为繁琐的运算,诸如求平方根和应用CORDIC算法计算角函数的有效实现,都要以可行的数字表示法为基础实现。
FPGA由于其物理位级编程结构的特点,提供了大量实现数字信号处理算法所需要的计算机算法。这恰好与带有定点多级累加器内核的可编程数字信号处理器(programmable digital signal processors,PDSP)相反。在FPGA设计中仔细地选择位宽就能够从本质上做到节约。

3.数字表示法

在工程的早期阶段,必须仔细考虑,确定是使用定点数还是浮点数更适合于解决问题。一般可以认为:定点数的实现具有更高的速度和更低廉的成本;而浮点数则具有更高的动态范围且不需要换算,这对较为复杂的算法可能更适合。下图给出了传统和非传统定点数和浮点数的数字表示法的一个概观。两套系统都由许多各自的标准所覆盖,当然,如果需要的话也可以以一种专有形式实现。

3.1 无符号整数

X X X 是 一个 N N N 位无符号二进制数, 则其范围是 [ 0 , 2 N − 1 ] \left[0,2^N-1\right] [0,2N1], 表达式如下:
X = ∑ n = 0 N − 1 x n 2 n X=\sum_{n=0}^{N-1} x_n 2^n X=n=0N1xn2n

其中 x n x_n xn X X X 的第 n n n 位二进制数字(也就是 x n ∈ [ 0 , 1 ] x_n \in[0,1] xn[0,1] )。数字 x 0 x_0 x0 称作最低有效位(Least Significant Bit, LSB), 具有相当于个位的权重。数字 x N − 1 x_{N-1} xN1 就是最高有效位(Most Significant Bit, MSB), 具有相当于 2 N − 1 2^{N-1} 2N1 的权重。

3.2 有符号数值

在有符号数字表示法中, 数字和符号是单独表示的。第一位代表符号, 余下的 N − 1 N-1 N1 位代表数字, 表达式如下:
X = { ∑ n = 0 N − 1 x n 2 n X ≥ 0 − ∑ n = 0 N − 1 x n 2 n X < 0 X= \begin{cases}\sum_{n=0}^{N-1} x_n 2^n & X \geq 0 \\ -\sum_{n=0}^{N-1} x_n 2^n & X<0\end{cases} X={n=0N1xn2nn=0N1xn2nX0X<0

表达式的范围是 [ − 2 N − 1 , 2 N − 1 ] \left[-2^{N-1}, 2^{N-1}\right] [2N1,2N1], 有符号数字表示法的优点就是简化了溢出的问题, 但缺点就是加法需要根据哪一个操作数更大来进行区分运算。

3.3 二进制补码(Two’s Complement, 2C)

有符号整数的 N N N 位二进制补码表达式如下:
X = { ∑ ∞ − 0 N − 1 x n 2 n X ≥ 0 2 k − ∑ n = 0 1 − 1 x n 2 n X < 0 X= \begin{cases}\sum_{\infty-0}^{N-1} x_n 2^n & X \geq 0 \\ 2^k-\sum_{n=0}^{1-1} x_n 2^n & X<0\end{cases} X={0N1xn2n2kn=011xn2nX0X<0
其范围是 [ − 2 N − 1 , 2 N − 1 − 1 ] \left[-2^{N-1}, 2^{N-1}-1\right] [2N1,2N11]。目前数字信号处理领域,最常用的就是用二进制补码来表示有符号数。这是由于它可以累加多个有符号数,且最终结果也在N位范围内,即可以忽略一切算术上的溢出。

例如,我们计算两个3位数的差(3-2=?):
3 10 ↔ 01 1 2 C − 2 10 ↔ 11 0 2 C 1 10 ↔ 1.00 1 2 C \begin{array}{rrr} 3_{10} & \leftrightarrow & 011_{2 C} \\ -2_{10} & \leftrightarrow & 110_{2 C} \\ 1_{10} & \leftrightarrow & 1.001_{2 C} \end{array} 3102101100112C1102C1.0012C

溢出可以忽略。所有的计算都是取模 2 N 2^N 2N 。这样就有可能出现不能够正确表示中间值的情形,但只要最终值有效, 结果就是正确的。例如计算 3 位的数字 2 + 2 − 3 2+2-3 2+23, 会得到一个中间值 010 + 010 = 10 0 2 C 010+010=100_{2 C} 010+010=1002C, 也就是 − 4 10 -4_{10} 410, 但是结果 100 − 011 = 100 + 101 = 00 1 2 C 100-011=100+101=001_{2 C} 100011=100+101=0012C, 是正确的。

二进制补码还可以用来实现模 2 N 2^N 2N 的算法, 而且不需要在算法中作任何改动。

3.4 二进制反码(也称作 1 的补码, One’s Complement, 1C)

N N N 位二进制反码数字表示法可以表示的整数范围是 [ − 2 N − 1 − 1 , 2 N − 1 − 1 ] \left[-2^{N-1}-1,2^{N-1}-1\right] [2N11,2N11] 。在二进制反码中,正整数和负整数除了符号位之外具有相同的表示方法。那么“0”就有正的和负的,两个表达式。二进制反码中有符号数的标准表达式如下:
X = { ∑ n = 0 N − 1 x n 2 n X ≥ 0 2 N − 1 − ∑ n = 0 N − 1 x n 2 n X < 0 X= \begin{cases}\sum_{n=0}^{N-1} x_n 2^n & X \geq 0 \\ 2^N-1-\sum_{n=0}^{N-1} x_n 2^n & X<0\end{cases} X={n=0N1xn2n2N1n=0N1xn2nX0X<0

请看下面的简单示例:
3 10 ↔ 0 1 1 1 C − 2 10 ↔ 1 0 1 1 C 1 10 ↔ 1. 0 0 0 1 C 进位 → → → 1 1 C 1 10 ↔ 0 0 1 1 C \begin{array}{rrrrrr} 3_{10} & \leftrightarrow & & 0 & 1 & 1_{1 C} \\ -2_{10} & \leftrightarrow & & 1 & 0 & 1_{1 C} \\ 1_{10} & \leftrightarrow & 1. & 0 & 0 & 0_{1 C} \\ 进位 & & \rightarrow & \rightarrow & \rightarrow & 1_{1 C} \\ 1_{10} & \leftrightarrow & & 0 & 0 & 1_{1 C} \end{array} 310210110进位1101.0100100011C11C01C11C11C
在二进制反码中需要, “进位问绕(carry wrap-around)” 加法。在最高有效位与最低有效位相加得到正确结果时, 就会出现进位。

尽管如此, 这种数字表示法还走能够有效地实现模 2 N − 1 2^N-1 2N1 运算, 而且不需要校正。因此二进制反码在实现特定的 DSP 算法(例如: 整数计算不 2 N − 1 2^N-1 2N1 的 Mersenne 变换)时, 还是有其特殊价值的。

3.5 减 1 表示法(Diminished one System, D1)

减1表示法是一种有偏移的数学表示法。正整数与二.进制补码相比减少了 1。 N N N 位 D1数值范围是 [ − 2 N − 1 , 2 N − 1 ] ( \left[-2^{N-1}, 2^{N-1}\right]( [2N1,2N1]( 不含 0 ) ) ) 。D1 数字表示法的编码规则定义如下:
X = { ∑ n = 0 A − 1 x n 2 n − 1 X ≥ 0 2 N − ∑ n = 0 N − 1 x n 2 n X < 0 2 N X = 0 X= \begin{cases}\sum_{n=0}^{A-1} x_n 2^n-1 & X \geq 0 \\ 2^N-\sum_{n=0}^{N-1} x_n 2^n & X<0 \\ 2^N & X=0\end{cases} X= n=0A1xn2n12Nn=0N1xn2n2NX0X<0X=0

从下面两个 D1 数相加可以看到, 对于 D1 而言还必须计算补码和颠倒进位的加法。
3 10 ↔ 0 1 0 D 1 − 2 10 ↔ 1 1 0 D 1 1 10 ↔ 1. 0 0 0 D 1 进位 → . -1 → 0 D 1 1 10 ↔ 0 0 0 D 1 \begin{array}{rrrrrr} 3_{10} & \leftrightarrow & & 0 & 1 & 0_{D 1} \\ -2_{10} & \leftrightarrow & & 1 & 1 & 0_{D 1} \\ 1_{10} & \leftrightarrow & 1. & 0 & 0 & 0_{D 1} \\ 进位 & & \rightarrow &\fbox{. -1} & \rightarrow & 0_{D 1} \\ 1_{10} & \leftrightarrow & & 0 & 0 & 0_{D 1} \end{array} 310210110进位1101.010. -1011000D10D10D10D10D1
D1 数不需要在算法上作任何改动就能够有效地实现模 2 N + 1 2^N+1 2N+1 运算。比如可以利用这一结论在 2 N + 1 2^N+1 2N+1 计算环中实现费尔出 NTT(Fermat Network Transfer Table, Fermat 网络传输表)。

3.6 原码、反码、补码总结

上面说了这么多,又是公式又是例子的估计很多人都开始晕了,现在直接总结口诀如下:

对于有符号数而言:

1.二进制的最高位是符号位:0表示正数,1表示负数(口诀0——>0,1——>-)。

2.正数的原码、反码、补码都是一样的(三码合一)。

3.负数的反码 = 它的原码符号位不变,其他位取反(0——>1,1——>0)。

4.负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1。

5.0的反码、补码都是0。

6.在计算机运算的时候,都是以补码的方式来运算的。

7.当我们看运算结果的时候,要看它的原码。

原码、反码、补码

关注微信公众号获取更多资讯:​​​​![在这里插入图片描述](https://img-

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

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

相关文章

手推车式电缆故障定位系统

武汉凯迪正大一体化电缆故障高压发生器用于测试各种型号的380V,600V,10kV,35kV,110kV,220kV,380kV电压等级的铜铝芯电力电缆、同轴通信电缆和市话电缆的各类故障&#xff0c;如电缆全长、开路、短路、断线、低阻故障、高阻故障、高阻泄露、高低阻抗接地、接地故障、铠装接地故障…

工控一体机7寸显示器电容触摸屏(YR07JK)产品规格说明书

如果您对工控一体机有任何疑问或需求&#xff0c;或者对如何集成工控一体机到您的业务感兴趣&#xff0c;可移步控芯捷科技。 一、硬件功能介绍 1.1 YR07JK介绍 YR07JK工控机是我公司推出的一款新型 Cortex-A17 架构&#xff0c;主频达1.8GHz、具有高性能低能耗的工业控制板卡…

甩掉接口文档烦恼!Spring Boot 集成 Knife4j,轻松玩转 API 可视化

一、引言&#xff1a;跟接口文档说拜拜 &#x1f44b; 作为一名 Java 开发者&#xff0c;你是否还在为编写繁琐的 API 文档而头疼&#xff1f;传统的手动编写方式不仅耗时费力&#xff0c;而且容易出错&#xff0c;难以维护。今天&#xff0c;我们就来介绍一款神器 Knife4j&am…

win10双网卡如何同时上内网和外网?

win10双网卡如何同时上内网和外网? Chapter1 win10双网卡如何同时上内网和外网?Chapter2 网络基础--win10双网卡设置成访问不同的网络 Chapter1 win10双网卡如何同时上内网和外网? 原文链接&#xff1a;https://www.jb51.net/os/win10/806585.html 场景&#xff1a;很多办…

【计算机毕业设计】388微信小程序足球赛事及队伍管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

QT7_视频知识点笔记_67_项目练习(页面以及对话框的切换,自定义数据类型,DB数据库类的自定义及使用)

视频项目&#xff1a;7----汽车销售管理系统&#xff08;登录&#xff0c;品牌车管理&#xff0c;新车入库&#xff0c;销售统计图表&#xff09;-----项目视频没有&#xff0c;代码也不全&#xff0c;更改项目练习&#xff1a;学生信息管理系统。 学生信息管理系统&#xff1…

大模型助力企业提效,九章云极DataCanvas公司联合腾讯搜狗输入法发布私有化解决方案

近日&#xff0c;九章云极DataCanvas公司与腾讯搜狗输入法的合作再次升级。在搜狗输入法开发者中心正式推出之际&#xff0c;九章云极DataCanvas公司作为搜狗输入法的首批开发合作伙伴&#xff0c;双方联合发布“企业知识管理助手”私有化解决方案。 “企业知识管理助手”整体私…

Facebook的魅力:数字时代的社交热点

在当今数字化时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为其中的巨头&#xff0c;一直以其独特的魅力吸引着全球数十亿用户。本文将深入探讨Facebook的魅力所在&#xff0c;以及它在数字时代的社交热点。 1. 社交网络的霸主&…

对于高速信号完整性,一块聊聊啊(17)

再来对前仿和后仿的仿真内容回顾一下&#xff1a; 从概念上有个根本的理解 前仿真又可以分为布局前仿真和布局后仿真。前者是在设计的最初阶段&#xff0c;建立和验证详细的电气拓扑结构并以此制定出详细的约束规则。后者是在布局完成的状态下&#xff0c;在布线过程中遇到的…

MATLAB分类与判别模型算法:基于LVQ神经网络的乳腺肿瘤诊断分类程序【含Matlab源码 MX_003期】

说明 实现基于LVQ&#xff08;Learning Vector Quantization&#xff0c;学习向量量化&#xff09;神经网络的乳腺肿瘤诊断分类任务。LVQ是一种监督学习算法&#xff0c;通常用于模式识别和分类任务。 算法思路介绍&#xff1a; 导入数据&#xff1a; 加载名为"data.mat&…

SSL证书申请需要多久?

SSL证书作为一种重要的网络安全工具&#xff0c;能够确保网站数据传输的安全&#xff0c;保护用户隐私和企业数据不受侵害。本文将详细介绍SSL证书的申请流程以及所需时间&#xff0c;帮助用户更好地规划和实施网络安全策略。 SSL证书&#xff0c;也称为TLS证书或HTTPS证书&am…

好用的国产大文件传输软件有哪些,快来看看吧

在这个数字化飞速发展的时代&#xff0c;我们每天都在与各种文件打交道&#xff0c;从简单的文档到庞大的视频素材&#xff0c;文件的体积越来越大&#xff0c;传统的文件传输方式逐渐显得力不从心。面对这个挑战&#xff0c;大文件传输软件应运而生&#xff0c;它们不仅解决了…

随后记: uniapp uview u-dropdown 下拉菜单固定高度滑动不生效

使用u-dropdown 下拉组件 按照uview官网讲解使用 配置根本不生效 scroll-y"true" style"height: 200rpx;" 但是在下拉的时候&#xff0c;不能上下滑动 &#xff0c;原因是自带的遮罩层挡住了 解决办法&#xff1a;在下拉菜单打开和关闭的时候&#xff0c…

从0开始带你成为Kafka消息中间件高手---第三讲

从0开始带你成为Kafka消息中间件高手—第三讲 实际上来说&#xff0c;每次leader接收到一条消息&#xff0c;都会更新自己的LEO&#xff0c;也就是log end offset&#xff0c;把最后一位offset 1&#xff0c;这个大家都能理解吧&#xff1f;接着各个follower会从leader请求同…

KDD 2024|基于隐空间因果推断的微服务系统根因定位

简介&#xff1a;本文介绍了由清华大学、南开大学、eBay、微软、中国科学院计算机网络信息中心等单位共同合作的论文《基于隐空间因果推断的受限可观测性场景的微服务系统根因定位》。该论文已被KDD 2024会议录用。 论文标题&#xff1a;Microservice Root Cause Analysis Wit…

10年老运营人吐血整理,给新媒体运营人的20条建议!沈阳新媒体运营培训

对于企业&#xff0c;在新媒体平台开设官方账号应该是已经成为标配。不仅是对企业新媒体运营需求量提高&#xff0c;新媒体人的薪资也是水涨船高。 另外值得注意的是&#xff0c;企业对资深新媒体运营人才尤为重视&#xff0c;这表现在他们不惜重金招聘高薪新媒体运营人才&…

Linux新增磁盘挂载分区

1. 查看磁盘分区名称 lsblk 可见&#xff0c;新增的分区为 sdb 2.格式化磁盘 mkfs.xfs -f /dev/sdb 3.挂在磁盘到 /ocean目录&#xff0c;挂在前先创建空目录 /ocean mkdir /oceanmount /dev/sdb /ocean 执行后&#xff0c;可用 df -h 查看分区是否成功 4.持久化磁盘分区&a…

计算机图形学入门03:二维变换

变换(Transformation)可分为模型(Model)变换和视图(Viewing)变换。在3D虚拟场景中相机的移动和旋转&#xff0c;角色人物动画都需要变换&#xff0c;用来描述物体运动。将三维世界投影变换到2D屏幕上成像出来&#xff0c;也需要变换。 1.缩放变换 缩放(Scale)变换&#xff1a; …

【B站 heima】小兔鲜Vue3 项目学习笔记 Day06

文章目录 购物车本地1. 列表购物车基础数据渲染2. 列表购物车单选功能3. 列表购物车全选功能4. 列表购物车统计列表实现5. 接口-加入购物车6. 接口-删除购物车7. 退出登录-清空购物车数据8. 合并购物车到服务器(重要) 结算1. 路由配置和基础数据渲染2. 地址切换-打开弹框交互实…

跨境人必读:X(原Twitter)和Facebook区别是什么?

在今日全球化的商业环境中&#xff0c;跨境电商领域的企业和独立站卖家正逐渐认识到社交媒体营销的巨大潜力。特别是X&#xff08;原Twitter&#xff09;和Facebook&#xff0c;作为领先的社交媒体平台&#xff0c;它们的使用不仅能够提升品牌知名度&#xff0c;还能直接影响销…