浮点型数据存储方式拆解:精度丢失与位级排查实战
简介这份PDF资料围绕C语言中浮点型数据的存储方式展开面向嵌入式开发者、笔试面试备考生及需要深入理解内存分配的编程初学者系统梳理了单精度float与双精度double在内存中的字节占用与精度差异。压缩包为单个PDF文档整体约215KB内容紧凑适合作为快速查阅的知识点笔记。目前已有828人学习下载。资料以IEEE-754格式标准为主线详细说明底数、指数、符号位的二进制布局并解释了指数偏移量127/1023的由来以及浮点数不能直接使用等号比较的原因。同时借助union联合体示例演示float、int、char数组从同一内存区域读取数据时的不同结果帮助读者从内存视角真正理解浮点型数据的表示、转换与大小端问题。1. 浮点型数据存储方式为什么值得重新研究某组网系统同步金额源端写入 123.45对端读出来变成 123.45000000000002状态校验直接报警。不是网络丢包也不是并发写坏而是两端的浮点型数据存储方式不一样同一个实数被切成了符号位、指数位、尾数位规则不同尾数低比特一变表现就是这种“差一点点”的诡异数值。做过序列化、模型推理、嵌入式上报的开发者基本都撞过这类现象但浮点内部对多数人还是一个黑匣子只知道别用 却不知道去哪一行日志定位。这篇文章把浮点型数据存储方式拆成能动手验证的路线先讲清十进制小数在二进制里的表示边界和选型逻辑再给出拆位脚本、float/double 边界参数和内存字节序视角最后落到高频踩坑排查和一组位级操作技巧。适合正在做跨平台数据同步、图像特征导出、底层存储协议或者嵌入式采集上报的工程师照着走一遍就能把“浮点精度问题”从玄学变成可定位、可比较、可防范的具体字段。2. 先立存储模型十进制小数到二进制位精度流失发生在哪2.1 0.1 转二进制为什么必然循环定点与浮点的选型逻辑0.1 在十进制里是一个很有“分寸”的小数但在二进制里它等于 0.000110011001100110011... 无限循环。原因在于二进制小数每一位代表 2 的负幂次1/2、1/4、1/8…… 而 0.1 1/1010 的因子是 2 × 5包含 5 这个二进制无法除尽的质因子所以二进制小数位永远凑不齐只能截断。类似地 0.2、0.3 各有各的循环规律只有 0.5、0.25 这类 2 的负幂可以直接精确表示。这里其实有一个前置选型问题如果业务量纲本来就是整数比如金额按“分”计那么用整型或定点数是最稳的。以 32 位定标 Q15 为例小数部分占 15 位能精确表示步长为 1/32768 的数范围却被限制在 -32768 到 32767 之间。实时系统或传感器上报里范围需求变化大、又要兼顾小数定点不好用才需要浮点。常见做法是范围广、精度要求相对固定时选浮点范围窄、步长固定时选定点。这个取舍的关键是理解“浮点用指数换范围用尾数换精度”它在靠近零和远离零时的绝对精度完全不同。用 Python 可以直观看到 0.1 的二进制展开什么时候停下def dec2bin_fraction(x, bits40): 把 0~1 之间的小数转成二进制字符串展示循环或截断效果 out [0.] for _ in range(bits): x * 2 if x 1: out.append(1) x - 1 else: out.append(0) if x 0: break return .join(out) print(dec2bin_fraction(0.1, 40)) # 输出: 0.0001100110011001100110011001100110011001 print(dec2bin_fraction(0.5, 8)) # 输出: 0.1这段脚本的逻辑是反复“乘 2 取整数位”每次乘 2 后看是否超过 1超过就记 1 并减 1否则记 0。bits控制最多输出多少位x 0提前终止。0.5 一次就停0.1 到 40 位还在循环这就是后面所有精度问题的根源。2.2 IEEE 754 的三段结构符号位、指数位、尾数位浮点存储标准的主流是 IEEE 754。单精度 float 总共 32 位最高 1 位符号 s接着 8 位指数 e剩下 23 位尾数 f双精度 double 是 64 位1 位符号、11 位指数、52 位尾数。存储时不是直接写科学计数法而是带偏置存储存储指数 真实指数 bias单精度 bias 127双精度 bias 1023。数值的计算规则是 value (-1)^s × 1.f × 2^(E-bias)其中 1.f 是规格化数的隐含前导 1f 是尾数里实际存的 23 位或 52 位。为什么不存那个前导 1因为规格化数的整数部分一定是 1省下这一位可以把尾数精度放大一倍。这是设计里最“抠”的地方也是新手拆位时最容易多算一位的地方。bias 存在的意义是让指数可以无符号比较8 位指数无符号范围 0~255加上偏置后真实指数可以表示负值同时按无符号整数大小可以直接比较两个数的大小关系排序和判断符号位非常省事。所以浮点数大小比较在 CPU 里可以做成“符号、指数、尾数三段分别按无符号比较”的流程这也是后面用位模式做分级比较的依据。2.3 规格化与非规格化指数全 0、全 1 的边界含义指数 8 位里有两个保留值全 0 和全 1。全 1 指数配合尾数全 0表示正负无穷全 1 指数配合尾数非 0表示 NaN用来承载 0/0、无穷减无穷、负数开平方这类未定义结果。指数全 0如果尾数也是 0那就是 ±0.0与符号位共同形成 0.0 和 -0.0 两个不同的位模式如果尾数非 0表示非规格化数。非规格化数的公式变成 value (-1)^s × 0.f × 2^(1-bias)也就是说此时没有隐含的 1而是用 0.f 表示一个极小的数。为什么要保留这一档为了让 0 附近有更密的表示填补最小规格化数与 0 之间的空档避免两个很小的数相减直接下溢成 0。代价是这部分运算速度通常比规格化数慢几十倍有些处理器遇到非规格化输入会触发慢路径。连续多帧传感器数据出现渐变到 0 的漂移时性能突然下降先查是不是进了非规格化区。3. 动手拆位把 float/double 的三个字段和边界值摆上台面3.1 用 Python 拆出符号、指数和尾数要真正理解浮点型数据存储方式最直接的办法是把一个浮点数的 32 位或 64 位原值拆出来逐段查看。下面这段脚本用 Python 的 struct 模块先按指定字节序打包成原始字节再读成整数最后用移位和掩码取出三个字段import struct def split_float32(x): 拆解单精度浮点返回 (符号, 指数, 尾数整数, 原始位模式) raw struct.unpack(I, struct.pack(f, x))[0] sign (raw 31) 0x1 exp (raw 23) 0xFF frac raw 0x7FFFFF return sign, exp, frac, raw def split_float64(x): 拆解双精度浮点返回 (符号, 指数, 尾数整数, 原始位模式) raw struct.unpack(Q, struct.pack(d, x))[0] sign (raw 63) 0x1 exp (raw 52) 0x7FF frac raw 0xFFFFFFFFFFFFF return sign, exp, frac, raw for x in [0.1, -2.5, float(inf), float(nan)]: s, e, f, raw split_float32(x) print(f{x!r:12} - sign{s} exp{e:#04x} frac{f:#08x} raw{raw:#010x})代码里的几个关键参数f表示按小端字节序打包单精度浮点I表示按小端读成 32 位无符号整数双精度对应d和Q。 31和 63是取符号位 0xFF和 0x7FF是取指数位 0x7FFFFF和 0xFFFFFFFFFFFFF是保留尾数。运行后能看到 0.1 的单精度尾数落在 0x1999999A 附近和 0.1 二进制无限循环截断后的舍入结果吻合。换成大端平台时把改成即可注意这和协议里约定的字节序不是一回事。3.2 float/double 参数速查表与取值范围实际操作中经常需要快速查 float 和 double 的边界参数这里整理成一张表项目floatdouble总位宽3264符号位11指数位811尾数位2352指数偏置 bias1271023最大正有限值约 3.4028235e38约 1.7976931348623157e308最小正规格化数约 1.17549435e-38约 2.2250738585072014e-308最小正非规格化数约 1.40129846e-45约 4.9406564584124654e-324十进制有效位数经验值6~915~17所谓“有效位数”不是固定值因为相邻尾数步长在数值大的时候变大小的时候变小。一个值在 1e10 附近的 float最小可分辨步长已经到 1024你对它加 1位模式根本不变。这就是“能表示的最大值很大”和“大数附近精度很差”并存的原因。协议设计时如果字段可能跨越多个数量级优先考虑 double如果确定在某个小区间float 配合固定小数位做整数传输反而更可控。3.3 检查 NaN、无穷和正负零一组直接的位级判断直接拿值比较判断 NaN 和无穷在语言层面可行但处理字节流、日志或者校验原始位模式时更需要一个按位分类的校验函数。NaN 的尾数非零部分其实可以携带诊断信息所以不要假设 NaN 只有一个固定位模式。下面这段脚本用来给一个 32 位原始值分类def classify_float32_bits(raw): 按位模式分类一个32位浮点原始值 sign (raw 31) 0x1 exp (raw 23) 0xFF frac raw 0x7FFFFF if exp 0xFF: if frac 0: return Infinity if sign 0 else -Infinity return NaN if exp 0: if frac 0: return Zero() if sign 0 else Zero(-) return Subnormal return Normal for raw in [0x00000000, 0x80000000, 0x7F800000, 0xFF800000, 0x7FC00001, 0x3F8CCCCD]: print(hex(raw), classify_float32_bits(raw))逻辑是先判指数全 1再判指数全 0最后落到规格化数。0x3F8CCCCD是 0.1f 的常见舍入结果看到它与0x3F8CCCCC的差异基本能判断出这条数据经过了哪一类舍入。把raw改成从二进制日志里读出的原始值就能快速回答“这个数到底合不合法”的问题。4. 从内存视角看浮点大小端、对齐与序列化的坑4.1 大小端对位模式的影响浮点数的十进制数值是一回事它在内存里的字节顺序是另一回事。1.0 的 IEEE 754 整数表示是 0x3F800000在小端机器上内存字节是00 00 80 3F在大端机器上是3F 80 00 00。直接把这个字节流搬到另一端并按对方方式解析结果完全不是 1.0甚至可能落到非规格化区。跨语言序列化最常见的错误不是精度而是字节序假设不一致。用 Python 可以一目了然import struct print(struct.pack(f, 1.0).hex()) # 小端输出: 0000803f print(struct.pack(f, 1.0).hex()) # 大端输出: 3f800000f和f分别指定小端和大端。常见做法是在协议头里固定“按大端传输”网络序统一用大端文件格式里则常常固定小端加明确的格式标识。不要依赖宿主默认字节序否则换一台设备就翻车。排查时先确认数据是“按数值传输”还是“按内存原样传输”这两者的字节处理路径完全不同。4.2 结构体对齐、padding 与 memcmp 判断C 语言里 float 在结构体中有对齐要求。比如一个struct { char tag; float value; }在常见 32 位 ABI 下value 的偏移是 4 而不是 1整个结构体大小是 8 而不是 5。如果按 memcmp 比较两个结构体是否“同一状态”padding 字节里的历史残留会导致比较失败或误报。用一段代码验证最直接#include stdio.h #include stddef.h struct sensor_data { char tag; // 1字节 float value; // 需要对齐到 4 字节 }; int main(void) { struct sensor_data a {A, 1.0f}; printf(size%zu offset_value%zu\n, sizeof(struct sensor_data), offsetof(struct sensor_data, value)); return 0; }在常见 ABI 上输出 size8、offset_value4。如果用#pragma pack(1)强行压缩size5、offset1但非对齐访问在某些架构上会变慢甚至触发异常。要不要 pack取决于传输协议定义不要为了省几个字节无脑压缩。memcmp 判断浮点内容的另一个问题是0.0 和 -0.0 位模式不同但值相等NaN 位模式不同且所有比较都返回假。所以不要用 memcmp 去判断浮点数组的内容相等先做规范化再比字节。4.3 序列化协议里的浮点字段按文本还是按原始位JSON 这类文本序列化把浮点转成十进制字符串可读性好双精度转回时要保证往返一致好的实现能保证float(repr(x)) x。问题出在手写格式化时%.2f % 123.456输出后丢了尾数细节另一边再按高精度解析两边的浮点型数据存储方式就对不上了。对需要存档、容易被人工阅读的日志用文本对带宽敏感的内部状态同步用原始位。二进制协议按原始位存储占字节少、速度稳定但没有版本保护一旦字段语义变化旧数据很难区分。如果要做浮点校验和我一般会对“规范化后的值”计算而不是对原始字节计算因为不同库对 NaN 和负零的处理会引入不一致。规范化的第一步是统一符号负零一律改成正零NaN 一律替换成同一个标准位模式。5. 浮点存储实战避坑5 个高频翻车现场与排查顺序5.1 高频踩坑记录现象、原因、解决下面这 5 条是按踩坑频率排的每一条都是现象、原因、解决三段。累加金额越加越偏。现象循环里从 0.01 累加一百万次结果不是 10000.00 而是 9999.9999。原因每次加法都做舍入误差累积在小数位里不断被保留。解决金额用整数分统计数据用 double 并配合 Kahan 求和如果必须用 float改成整数计数避免浮点累加。跨端同步后位模式对不上。现象两端算出相同数学结果但落盘字节不同。原因一端开启了快速数学优化或某些平台的中间精度用了更多位。解决在协议边界做强制的单精度/双精度转换写回前先做一次明确类型转换再序列化避免使用改变 IEEE 754 语义的激进编译选项。两个值打印出来一样比较却不相等。现象日志里都是 1.23a b返回 False。原因打印默认只显示部分小数位实际位模式差 1 到 2 个 ulp。解决不用 判断解析结果用fabs(a-b) n * max(ulp(a), ulp(b))Python 里用math.isclose并显式传rel_tol和abs_tol。浮点做字典键查不到值。现象同一个数值有时能查到有时查不到NaN 作为键直接找不到自己。原因NaN ! NaN-0.0 和 0.0 的哈希行为也不一致。解决浮点键先规范化为定标整数例如round(x * 1e6)再作为键需要按原始语义比较时用位模式排序后的规范形式做键。非规格化数据导致性能突降。现象传感器信号消失后输出接近 0 的值处理时 CPU 占用暴涨。原因非规格化数触发处理器慢路径有些平台慢几十倍。解决如果应用对接近 0 的值不敏感直接把极小值按 0 处理或打开处理器的 FTZ/DAZ 模式让非规格化输入按 0 处理。要注意这是在用语义换性能加注释说明。5.2 排查浮点存储问题的定位顺序我的习惯是先看位模式再看数值。收到一个诡异浮点第一步打印成十六进制原值第二步用第 3 章的脚本拆出 sign/exp/frac第三步对照协议看指数范围是否合法第四步查舍入模式。常见“数值怪但位模式合法”的问题多半出在转换和舍入常见“位模式不合法”的问题多半是字节序、对齐或者截断。快速打印位模式用一行命令python3 -c import struct; print(hex(struct.unpack(I, struct.pack(f, 0.1))[0])) # 输出 0x3dcccccd还有一个容易忽略的坑编译器在调试模式和优化模式下浮点求值顺序可能不同相同输入在不同构建里会产生不同位模式。最直接的排查手段是在进入协议边界时统一加规范化函数把浮点统一成同一种类型和舍入模式。数据要落库就在写入之前统一到位模式而不是依赖每个调用点的比较结果。6. 进阶技巧用位模式做精度分级比较与快速数量级判断6.1 位掩码法做浮点容差比较IEEE 754 的位模式设计带来一个实用特性对两个同号正数浮点位模式之间的整数差正好对应 ulp 数量。这意味着可以用整数减法来近似判断两个浮点值是否“足够接近”比绝对误差更稳定不会在数值变大时误判。关键是要把负数映射成单调可比的整数负数的位模式随数值增大反而减小所以符号位为 1 时把整个位模式取反正数则保留并置位符号位。import struct def f32_as_ordered_int(x): 将单精度浮点映射为可单调比较的无符号整数 raw struct.unpack(I, struct.pack(f, x))[0] if raw 0x80000000: return (~raw) 0xFFFFFFFF return raw | 0x80000000 def f32_close_bits(a, b, max_ulp4): 比较两个浮点是否在 max_ulp 个最小步长内 ia f32_as_ordered_int(a) ib f32_as_ordered_int(b) return abs(ia - ib) max_ulp print(f32_close_bits(1.0000001, 1.0000002, 4)) # True print(f32_close_bits(1.0, 1.0001, 4)) # Falsemax_ulp是按“最小步长”做容差不是绝对误差适合传感器数据和物理量比较。换成 double 时需要把掩码改成 64 位对应值符号位0x8000000000000000尾数掩码0xFFFFFFFFFFFFF。这个技巧的来源就是 IEEE 754 的单调性设计原理简单但比fabs(a-b) eps更值得写进代码。6.2 从位模式快速读取数量级与规范化另一个实用技巧取 double 的指数字段直接估算数量级可以避免高频调用 log 函数。比如在日志系统里想知道当前值落在哪个十的区间用指数位估算log10已经足够。实现思路是log10(x) log2(x) × log10(2)其中log2的整数部分就是指数 E小数部分用尾数线性近似def approx_log10_from_bits(x): 用指数位估算 log10避免真实 log 调用 if x 0: return -100.0 raw struct.unpack(Q, struct.pack(d, x))[0] exp ((raw 52) 0x7FF) - 1023 frac 1.0 (raw 0xFFFFFFFFFFFFF) / (1 52) return exp * 0.3010299957 (frac - 1.0) * 0.4343这里的 0.3010299957 是 log10(2)0.4343 是 log10(e)尾数线性近似的精度对数量级判定足够。实际代码里如果对精度要求高直接调标准库 log10如果只是给日志分级、自适应选择单位这个位级版本省掉了函数调用开销。我现在的习惯是只要协议里出现浮点字段第一件事先把字节序、位宽、舍入模式和规范化规则写进接口文档要求所有端强制统一并在关键入口放一个拆位工具函数出了问题直接对比位模式而不是争论数值。这套规则换回过我不少凌晨时间希望帮到你。本文还有配套的精品资源点击获取

相关新闻

等保2.0内存安全基线检测:Linux内核参数自动化核查脚本

等保2.0内存安全基线检测:Linux内核参数自动化核查脚本

简介:本资源是一份面向网络安全工程师、等保合规人员及CTF-Misc方向学习者的专业技术文档,聚焦内存安全基线检测与等保2.0配置核查的自动化实践。文档系统解析等保2.0对内存安全(如缓冲区溢出、空指针引用、内存泄漏)的合规要求&a…

2026/10/10 0:28:42 阅读更多 →
SQL Server 2008误删数据恢复:日志备份与STOPAT时间点还原实战

SQL Server 2008误删数据恢复:日志备份与STOPAT时间点还原实战

简介:这是一份面向 SQL Server 数据库管理员及运维人员的实战资料,聚焦误删除数据后的紧急恢复。文档先明确恢复的两个前提:至少存在一个误删除前的完全备份,且数据库恢复模式为“完全(Full)”;…

2026/10/10 0:28:42 阅读更多 →
Altium Designer 10 简明教程:从原理图到 PCB 打样全流程实操指南

Altium Designer 10 简明教程:从原理图到 PCB 打样全流程实操指南

简介:《AD10简明教程—快速入门》是一份面向电子工程初学者与硬件工程师的Altium Designer 10入门文档,帮助读者从零掌握原理图绘制到PCB制造的完整设计链路。资源包内含1个doc文档,压缩包约9.32MB,以图文教程形式系统组织内容。文…

2026/10/10 0:27:42 阅读更多 →

最新新闻

基于PCA9422与STM32F469II的便携设备电源管理方案

基于PCA9422与STM32F469II的便携设备电源管理方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:02:30 阅读更多 →
YOLOv8+HCANet鲜花检测系统:ONNX量化+Tkinter桌面应用

YOLOv8+HCANet鲜花检测系统:ONNX量化+Tkinter桌面应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:02:30 阅读更多 →
STM32F427ZI与PCA9422协同实现完整电源管理:多路DCDC、DVS动态调压与上电时序控制

STM32F427ZI与PCA9422协同实现完整电源管理:多路DCDC、DVS动态调压与上电时序控制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:02:30 阅读更多 →
SQLite在.NET中的32位与64位共存配置与避坑指南

SQLite在.NET中的32位与64位共存配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:02:30 阅读更多 →
模拟炒股源码全解析:离线数据与K线指标交易系统

模拟炒股源码全解析:离线数据与K线指标交易系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:02:30 阅读更多 →
便携式电源管理实战:PCA9422与PIC18F85K90的低功耗软硬协同设计

便携式电源管理实战:PCA9422与PIC18F85K90的低功耗软硬协同设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:01:29 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →