51单片机如何使用printf打印unsigned long的那些事

51单片机在处理32bit的数要特别注意:

下面代码咋一看regmask当作32bit数进行操作,没什么问题。

c 复制代码
unsigned long  regmask = 0;
regmask = ~((1<<startbit) -1);
regmask &= ((1<<endbit) -1)|(1<<endbit);
RegValue &= regmask;

在51的IDE中这么写,会把移位的1当作16bit的数来操作,导致结果和预想不一致。

正确的写法是在1前面加UL

c 复制代码
unsigned long  regmask = 0;
regmask = ~((1UL<<startbit) -1);
regmask &= ((1UL<<endbit) -1)|(1UL<<endbit);
RegValue &= regmask;

还有,51单片机的float和double是一样的,这个也要特别注意一下。

说完了运算,再说说printf

大家都知道

c 复制代码
%d: 十进制整数
%u: 无符号整数
%f: 浮点数
%s: 字符串
%c: 单个字符
%x, %X: 十六进制整数

对于unsigned long,需要使用%lu,对于限定精度的浮点数需要加入数字限定%.1f

相关推荐
人工智能训练1 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
会跑的葫芦怪2 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
Hx_Ma163 小时前
SpringMVC框架提供的转发和重定向
java·开发语言·servlet
期待のcode4 小时前
原子操作类LongAdder
java·开发语言
舟舟亢亢4 小时前
Java集合笔记总结
java·笔记
pas1365 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
小酒窝.5 小时前
【多线程】多线程打印ABC
java
摇滚侠5 小时前
2 小时快速入门 ES6 基础视频教程
前端·ecmascript·es6
乡野码圣5 小时前
【RK3588 Android12】RCU机制
java·jvm·数据库
JAVA+C语言5 小时前
如何优化 Java 多主机通信的性能?
java·开发语言·php