C语言定义fixed_t什么意思

在 C 语言中,fixed_t 通常是一个自定义的类型别名(typedef),用于表示固定点数(Fixed-Point Number),而非 C 语言标准库中的原生类型。它主要用于需要高效实数运算但无法使用浮点数的场景(如嵌入式系统、性能敏感代码)。

核心概念:固定点数(Fixed-Point)
原理
用整数类型(如 int32_t)表示实数,但隐含约定小数点位置。
例如:

若定义 小数部分占 16 位,则数值实际值 = 存储值 / 2¹⁶

存储值 0x00010000(65536)→ 实际值 1.0

存储值 0x00018000(98304)→ 实际值 1.5

优势

性能高:整数运算快于浮点运算(尤其无FPU硬件时)。

确定性:避免浮点精度误差(适用于金融、嵌入式控制)。

内存小:通常用 16/32 位整数存储,比 float/double 更紧凑。

劣势

范围/精度受限:需提前规划整数/小数部分的位数。

手动处理缩放:乘除需显式移位调整小数点位置。

#include <stdint.h>

// 常见定义方式:32位整数,其中16位表示小数部分(Q16.16格式)
typedef int32_t fixed_t;
#define FIXED_SHIFT 16 // 小数部分位数

// 辅助宏(可选)
#define INT_TO_FIXED(x) ((fixed_t)((x) << FIXED_SHIFT)) // 整数转固定点
#define FIXED_TO_INT(x) ((x) >> FIXED_SHIFT) // 固定点取整数部分
#define FLOAT_TO_FIXED(x) ((fixed_t)((x) * (1 << FIXED_SHIFT))) // 浮点转固定点
#define FIXED_TO_FLOAT(x) ((float)(x) / (1 << FIXED_SHIFT)) // 固定点转浮点

// 加法(直接整数相加)
fixed_t a = FLOAT_TO_FIXED(1.5); // a = 0x00018000
fixed_t b = FLOAT_TO_FIXED(2.25); // b = 0x00024000
fixed_t sum = a + b; // sum = 0x0003C000 → 3.75

// 乘法(需移位调整)
fixed_t multiply(fixed_t x, fixed_t y) {
int64_t tmp = (int64_t)x * y; // 防溢出
return (fixed_t)(tmp >> FIXED_SHIFT); // 右移去除多余小数位
}

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

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

相关文章

音频3A处理简介之ANS(自动噪声抑制)

我们常用的手机、消费类摄像头等产品的麦克风所采集的原始声音信号中往往包含了比较多的背景噪音&#xff0c;不仅影响用户录音和回放的使用体验&#xff0c;而且这些噪声数据还会降低音频编码的压缩效率&#xff0c;因此有必要对音频底噪进行抑制处理&#xff0c;这就是ANS&am…

Python 使用期物处理并发(使用concurrent.futures模块启动 进程)

使用concurrent.futures模块启动进程 concurrent.futures 模块的文档 &#xff08;https://docs.python.org/3/library/concurrent.futures.html&#xff09;副标题 是“Launching parallel tasks”&#xff08;执行并行任务&#xff09;。这个模块实现的是真正 的并行计算&…

【系统全面】Linux内核原理——基础知识介绍

理解内核&#xff1a;内核原理 计算机系统的软件分层 不同于单片机中使用代码直接与硬件交互&#xff0c;对于这种方式的缺点深有&#xff1a; &#xff08;1&#xff09;复杂度高&#xff0c;调用难度高&#xff0c;需要深入理解硬件的工作原理和细节。 &#xff08;2&#xf…

Oracle自治事务——从问题到实践的深度解析

一、引言&#xff1a;当“关键操作”遇上主事务的“生死绑定”​先问大家一个问题&#xff1a;假设你在开发一个用户管理系统&#xff0c;核心功能是“用户注册”&#xff0c;同时需要记录“操作日志”。某天&#xff0c;用户提交注册信息时&#xff0c;数据库突然因磁盘空间不…

广播(Broadcast)和组播(Multicast)对比

概述 广播&#xff08;Broadcast&#xff09;和组播&#xff08;Multicast&#xff09;是计算机网络中两种重要的一对多通信方式&#xff0c;用于高效地将数据同时分发给多个接收者&#xff0c;它们的核心区别在于目标接收者的范围和控制精度&#xff0c;基于业务对效率、规模和…

在 HTTP GET 请求中传递参数有两种标准方式

方法 1&#xff1a;URL 查询参数&#xff08;Query Parameters&#xff09;格式&#xff1a;?参数名值&参数名2值2示例请求http://localhost:8080/hello?name张三&age25后端接收方式GetMapping("/hello") public String sayHello(RequestParam String name…

pycharm windows/linux/mac快捷键

适用于mac的快捷键 适用于windows和linux的快捷键 参考资料&#xff1a; https://www.jetbrains.com/zh-cn/help/pycharm/mastering-keyboard-shortcuts.html

前端包管理工具深度对比:npm、yarn、pnpm 全方位解析

前言&#xff1a;为什么我们需要包管理工具&#xff1f; 在现代前端开发中&#xff0c;模块化已成为标配。一个中型项目可能依赖数百个第三方包&#xff0c;手动管理这些依赖几乎是不可能的任务。包管理工具应运而生&#xff0c;它们不仅解决了依赖安装问题&#xff0c;还提供了…

调试Claude code的正确姿势

随着kimi k2的发布&#xff0c;Claude code的使用频率愈发的频繁&#xff0c;在发现moonshot官方提供了调试工具之后&#xff0c;我对claude code的交互过程愈发好奇。 moonpalace的安装 官方moonpalace仓库地址 go语言编写&#xff0c;可以直接下载二进制二进制文件&#x…

【常见分布及其特征(5)】连续型随机变量-连续均匀分布

概率密度函数&#xff08;PDF&#xff09;与概率质量函数&#xff08;PMF&#xff09;说明 基本概念区分 对于连续型随机变量&#xff0c;通常使用 概率密度函数 (Probability Density Function, PDF) 进行描述&#xff1b;这与离散型随机变量使用的 概率质量函数 (Probabili…

FAN-UNET:用于生物医学图像分割增强模型

目录 一、论文结构概述 二、创新点详解 三、创新点结构与原理 &#xff08;1&#xff09;Vision-FAN Block&#xff1a;全局与周期特征的融合引擎 &#xff08;2&#xff09;FANLayer2D&#xff1a;周期性建模的核心 四、代码复现思路 五、仿真结果分析 &#xff08;1&…

基于SpringBoot的篮球运动员体测数据分析及训练管理系统论文

第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各行业&#xff0c;尤其是规模较大的企业和学校等…

矩阵算法题

矩阵算法题1、矩阵置零2、螺旋矩阵3、旋转图像4、搜索二维矩阵1、矩阵置零 解题思路&#xff1a;这道题核心是要确定哪些行和哪些列要置零。所以定义两个数组&#xff0c;一个记录要置零的行&#xff0c;一个记录要置零的列。遍历整个矩阵&#xff0c;如果当前位置是0的话&…

Spring底层(二)Spring IOC容器加载流程原理

一、怎么理解SpringIoc IOC&#xff1a;Inversion Of Control&#xff0c;即控制反转&#xff0c;是一种设计思想。之前对象又程序员自己new自己创建&#xff0c;现在Spring注入给我们&#xff0c;这样的创建权力被反转了。 所谓控制就是对象的创建、初始化、销毁。 创建对象…

UDP中的单播,多播,广播

文章目录UDP 简单回顾一、单播&#xff08;Unicast&#xff09;定义特点应用举例二、广播&#xff08;Broadcast&#xff09;定义特点应用三、多播&#xff08;Multicast&#xff09;定义特点应用UDP 单播、广播、多播的对比总结额外说明代码简要示例&#xff08;C&#xff09;…

数据库练习3

一、建立product表&#xff0c;操作方式operate表要求&#xff1a;1.定义触发器实现在产品表(product)中每多一个产品,就在操作表(operate)中记录操作方式和时间以及编号记录。注&#xff1a;操作说明&#xff1a;标记执行delete 、insert、 update2.定义触发器实现在产品表(pr…

pycharm和anaconda安装,并配置python虚拟环境

1、pycharm和anaconda安装 PyCharm与Anaconda超详细安装配置教程_anaconda pycharm安装-CSDN博客https://blog.csdn.net/qq_32892383/article/details/116137730 2、pycharm汉化 PyCharm汉化&#xff1a;简单两步搞定&#xff01;PyCharm怎么设置中文简体&#xff0c;为什么…

EP04:【Python 第一弹】函数编程

一、定义 函数指将一组语句的集合通过一个变量名封装起来&#xff0c;调用这个函数变量名&#xff0c;就可以执行函数。 二、特点 减少重复逻辑代码的编写将程序中的逻辑可以进行扩展维护项目程序的代码更简单 三、创建 def 函数名():逻辑代码1逻辑代码2return 结果 函数名…

linux安装Mysql后添加mysql的用户和密码

在 MySQL 中创建用户并设置密码的完整指南如下&#xff1a; 方法 1&#xff1a;使用 CREATE USER 语句&#xff08;推荐&#xff09; -- 创建新用户并设置密码 CREATE USER newuserlocalhost IDENTIFIED BY your_password;-- 授予权限&#xff08;示例&#xff1a;授予所有数据…

React hooks——memo

一、简介React.memo 是 React 提供的一个高阶组件&#xff08;Higher-Order Component&#xff09;&#xff0c;用于优化函数组件的渲染性能&#xff0c;它通过浅比较&#xff08;shallow compare&#xff09;props 的变化来决定是否重新渲染组件。1.1 基本用法const MyCompone…