嵌入式DSP开发的定点数和浮点数

嵌入式DSP开发的定点数和浮点数文章目录 1 前言 2 什么是原码 反码和补码 2 1 原码表示法 2 2 反码表示法 2 3 补码表示法 2 4 小结 2 4 在计算机中为什么采用补码来进行存储 3 十进制的数和二进制数之间的转换 3 1 十进制的数转换为二进制数 3 2 二进制的数转换为十进制数 4 定点数和浮点数的概念 4 1 定点数 4 1 1 定点数存储格式 Q 格式 4 1 2 定点数与浮点数之间的转换 4 1 2 1 浮点数到定点数 4 1 2 2 定点数到浮点数 4 1 2 2 定点数到定点数 4 1 3 定点数能够表示的数值范围与精度 4 1 3 定点数的动

1 前言

在DSP芯片的介绍中,我们常常会听到定点数运算、浮点数运算,那到底什么是定点数,什么是浮点数呢?为回答这个问题,本篇文章打算谈一谈定点数和浮点数的一些基本概念,在此之前作为预备知识,会先介绍一些关于原码、反码和补码的内容,然后介绍一下十进制数与二进制数之间的转化,最后再介绍定点数和浮点数。

2 什么是原码、反码和补码

2.1 原码表示法

2.2 反码表示法

2.3 补码表示法

2.4 小结

2.4 在计算机中为什么采用补码来进行存储

3 十进制的数和二进制数之间的转换

3.1 十进制的数转换为二进制数

3.2 二进制的数转换为十进制数

4 定点数和浮点数的概念

在用二进制存储数据时,如果小数点的位置事先已有约定,不再改变,此类数称为“定点数”。相比之下,如果小数点的位置可变,则称为“浮点数”。

4.1 定点数

定点数的本质是小数,整数只是其表现形式,确定小数点的位置称为定标。常用的定点数有两种表示形式:
(1) 如果小数点位置约定在最低数值位的后面,则该数只能是定点整数;
(2) 如果小数点位置约定在最高数值位的前面,则该数只能是定点小数。
目前计算机中多采用定点纯整数表示,因此将定点数的运算简称为整数运算。
定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。
对于各种整型数据所能表达的数值范围如下:
在这里插入图片描述





4.1.1 定点数存储格式(Q格式)

4.1.2 定点数与浮点数之间的转换

定点数与浮点数转化时需要使用2^n的关系进行转化。

4.1.2.1 浮点数到定点数

在这里插入图片描述

4.1.2.2 定点数到浮点数

在这里插入图片描述

4.1.2.2 定点数到定点数

在这里插入图片描述

4.1.3 定点数能够表示的数值范围与精度

4.1.3 定点数的动态范围

4.1.3 定点数的算术运算

定点运算的硬件实现较为简单,功耗较小,主要注意的是数据的定标、溢出以及误差。

4.1.3.1 定点数加减运算
4.1.3.2 定点数乘法运算

4.1.1 定点DSP芯片

4.2 浮点数

4.2.1 科学计数法

比如123.45用十进制科学计数法表示为:1.234510^2
其中给出几个概念:1.2345称为尾数(有效数字的非正式说法),10为基数,2为指数(exponent,也称为阶码)。浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。对于一个二进制的数,比如1011.01,用科学计数法可以表示为:1.01101
2^3。
小数部分占的位( bit)数愈多,数的有效数字愈多(有效数字指的是从左往右第一个不为0的数开始的数的位数),精度愈高。指数部分占的位数愈多,则能表示的数值范围愈大。换句话说就是,浮点数所能表示的范围取决于阶码;精度取决于尾数。

4.2.1 浮点数的存储格式

  1. 第一个域为符号域。其中 0 表示数值为正数,而 1 则表示负数。
  2. 第二个域为指数域。其中单精度数为 8 位,双精度数为 11 位。以单精度数为例,8 位的指数为可以表达 0 到 255 之间的 255 个指数值。但是,指数可以为正数,也可以为负数。为了处理负指数的情况,实际的指数值按要求需要加上一个偏差(Bias)值作为保存在指数域中的值,单精度数的偏差值为 127,而双精度数的偏差值为 1023。比如,单精度的实际指数值 0 在指数域中将保存为 127;而保存在指数域中的 64 则表示实际的指数值 -63。 偏差的引入使得对于单精度数,实际可以表达的指数值的范围就变成 -127 到 128 之间(包含两端)。我们后面还将看到,实际的指数值 -127(保存为 全 0)以及 +128(保存为全 1)保留用作特殊值的处理。这样,实际可以表达的有效指数范围就在 -127 和 127 之间。
  3. 第三个域为尾数域,其中单精度数为 23 位长,双精度数为 52 位长。除了我们将要讲到的某些特殊值外,IEEE 标准要求浮点数必须是规范的。这意味着尾数的小数点左侧必须为 1,因此我们在保存尾数的时候,可以省略小数点前面这个 1,从而腾出一个二进制位来保存更多的尾数。这样我们实际上用 23 位长的尾数域表达了 24 位的尾数。比如:对于单精度数而言,二进制的 1001.101(对应于十进制的 9.625)可以表达为 1.001101 × 23,所以实际保存在尾数域中的值为 0011 0100 0000 000 0000 0000,即去掉小数点左侧的 1,并用 0 在右侧补齐。
    举例:
    浮点数:+27.5
    二进制:11011.1
    指数式(754标准):1.10111*2^4,即尾数是1.10111,指数为4,符号位为0
    因此符号域为0
    指数域的值为4+127=131 对应二进制为:1000 0011
    尾数域为10111 000000000000000000
    因此在计算机中的单精度存储:
    在这里插入图片描述
    0100 0001 1101 1100 0000 0000 0000 0000 ,在DSP中的十六进制表示为0x41DC0000
    将十六进制表示的浮点数转换成十进制,则首先要读出浮点数的数符s,阶码e,十进制尾数x,然后按照如下计算公式计算对应的十进制数:(-1)^s * (1 + x) * 2^(e – 127)










4.2.2 浮点数能够表示的数值范围与精度

在这里插入图片描述

4.2.2 浮点运算

5 总结

主要介绍了定点数和浮点数的一些基本概念。之后在嵌入式开发中再给出一些相关的实例哈~~~~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225810.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午8:29
下一篇 2026年3月17日 上午8:29


相关推荐

  • junit5 入门系列教程-01-junit5 简单入门例子

    junit5 入门系列教程-01-junit5 简单入门例子目录目录 Junit5 简介 JDK 支持快速开始 Maven 导入测试案例变化文档参考 Junit5JUnit5 目标是为 JVM 上的开发人员端测试创建一个最新的基础 这包括关注 Java8 和以上版本 以及支持多种不同的测试风格 JUnit5 是 JUnitLambda 和它在 Indie

    2026年3月19日
    3
  • Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap

    Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap问题描述:使用Eclipse自带的Maven插件创建Web项目时报错:Couldnotresolvearchetypeorg.apache.maven.archetypes:maven-archetype-webapp:RELEASEfromanyoftheconfiguredrepositories.Couldnotresolveartifa

    2022年7月24日
    11
  • pycharm专业版的合法激活方法

    pycharm专业版的合法激活方法Pycharm 专业版有三种激活方式 1 jetbrains 账号 2 激活码 3 license 服务器本文要介绍 2 种激活方法 license 服务器及 jetbrains 账号网上流传的方法大多数是利用 license 服务器 非常简单 只需填入一个链接就可以 缺点如下 无法获得永久使用权限 因为你不知道 license 服务器什么时候到期 我的服务器今天就到期了 当然 这种服务器

    2026年3月27日
    2
  • linux 修改文件内容sed,linux下通过sed命令直接修改文件内容

    linux 修改文件内容sed,linux下通过sed命令直接修改文件内容linux下通过sed命令直接修改文件内容sed是实现对流的编辑。通常,我们使用sed可以实现内容的编辑后然后保存成另外的一个文件,如果正确的话,才写入到源文件。但是某些时候,我们需要直接修改文件,因为,保存文件到一个文件,然后再覆盖原文件的办法显得很麻烦。其实很简单,只需要一个-i参数就可以了。比如,我想替换文件中的properties为property,可以使用sed’s/propert…

    2022年7月26日
    7
  • vue 基于 exceljs 导出 excel实战示例

    vue 基于 exceljs 导出 excel实战示例背景在做一个小东西 需要导出 excel 之前导出 excel 的方式都是在服务器端 生成 excel 然后在浏览器端进行下载 这次想进行在前端进行导出 基于这个需求在网上找了一些工具 这里会做一些对比工具对比名称优点缺点活跃度 js xlsx 支持 nodejs 服务端和兼容大多数浏览器导出 读写支持完美社区版本不支持样式定制 15867exceljs 支持 nodejs 服

    2026年3月18日
    2
  • MATLAB函数fir1「建议收藏」

    MATLAB函数fir1「建议收藏」fir1基于窗函数的fir滤波器设计;主要形式:b=fir1(n,Wn)b=fir1(n,Wn,ftype)b=fir1(___,window)b=fir1(___,scaleopt)系数的含义n—滤波器阶数。Wn—截止频率,0≤Wn≤1,Wn=1对应于采样频率的一半。当设计带通和带阻滤波器时,Wn=[W1W2],W1≤…

    2022年7月17日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号