How to get nth bit values(如何获取第n位值)
本文介绍了如何获取第n位值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是位移位和c++的新手。
假设我有一个uint8_t 00100100
(36),我想检查是否设置了第3位。
以下是我现在如何做到这一点的代码,只需要一点时间。
uint8_t x = 36;
if(x&1<<3)
printf("is set");
如何检查是否设置了第3位或第6位?我想检查几种位的组合,如第5位、第7位或第8位。
最优雅的方式是什么?
推荐答案
按数字位置校验位是正确的方法之一,但这会使代码依赖于幻数,从而增加读取和维护的难度。
通常,在检查位掩码时,目标是检查某个特定标志,例如硬件寄存器。
例如,假设整数的每一位都代表您房子中的一个特定灯光,并且您想要检查浴室和厨房是否打开:
enum LightMask {
ENTRANCE = 0x01,
LIVING_ROOM = 0x02,
RESTROOM = 0x04,
KITCHEN = 0x08,
BATHROOM = 0x10,
BEDROOM1 = 0x20,
BEDROOM2 = 0x40,
ATTIC = 0x80
};
uint8_t lightsOn = GetLightsOn();
if (lightsOn & (BATHROOM | KITCHEN)) {
// ...
}
这很优雅,易于理解,并且可以很容易地进行修改。
如果您想显式地使用位位置而不是常量,也可以用位移位来表示枚举,而不会对编译器产生任何影响:
enum LightMask {
ENTRANCE = 1 << 0,
LIVING_ROOM = 1 << 1,
RESTROOM = 1 << 2,
KITCHEN = 1 << 3,
BATHROOM = 1 << 4,
BEDROOM1 = 1 << 5,
BEDROOM2 = 1 << 6,
ATTIC = 1 << 7
};
这篇关于如何获取第n位值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何获取第n位值


基础教程推荐
猜你喜欢
- 设计字符串本地化的最佳方法 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- C++,'if' 表达式中的变量声明 2021-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01