首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从uint16_t变量中获得5-7位?

如何从uint16_t变量中获得5-7位?
EN

Stack Overflow用户
提问于 2022-05-09 21:50:50
回答 2查看 162关注 0票数 1

在MDR32(类似于STM32)微控制器中,有一个16位的STAT寄存器来描述以太网状态,文档中说7..5位表示接收到的数据包的数量,我如何获得这个值并将其保存在uint16_t变量中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-09 21:54:04

根据读取表示法的方式,从整数中获取第5、6和7位,您可以这样做:

代码语言:javascript
复制
auto ethStatus = (stat >> 5) & 7;
票数 2
EN

Stack Overflow用户

发布于 2022-05-09 21:57:07

如果你把位右移5位,那么这5..7位将在0..2位置。如果按位,并且值为0b000000000000000111U(位掩码),那么位置3.15中的所有位将为0。这将使您在最不重要的位置上得到您想要的3位:

代码语言:javascript
复制
unsigned ethernet_status = (STAT >> 5U) & 0b0000000000000111U;

您可以通过将1向左移动N-1并减去1,生成N个低位位的位掩码:

代码语言:javascript
复制
unsigned bit_first = 5;
unsigned bit_count = 3;
unsigned bit_mask = (1U << bit_count) - 1U;
unsigned ethernet_status = (STAT >> bit_first) & bit_mask;

可以将值存储在如下变量中:

代码语言:javascript
复制
uint16_t variable = ethernet_status;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72178546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档