gpt4 book ai didi

c++ - 如何获得第n位值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:15 24 4
gpt4 key购买 nike

我对整个位移位和 C++ 比较陌生。

假设我有一个 uint8_t 00100100 (36),我想检查第 3 位是否已设置。这是我现在如何做的代码,只有一点点。

uint8_t x = 36;
if(x&1<<3)
printf("is set");

我如何检查第 3 个第 6 个位是否已设置?我想检查几个位的组合,例如第 5 位、第 7 位或第 8 位。

最优雅的方法是什么?

最佳答案

按数字位置检查位是这样做的正确方法之一,但它使代码依赖于魔数(Magic Number),这使得它更难阅读和维护。

通常,在检查位掩码时,目标是检查某些特定标志,例如硬件寄存器。

例如,假设您的整数中的每一位代表您家中的一盏特定灯,并且您想检查浴室和厨房是否开着:

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
};

关于c++ - 如何获得第n位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27412032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com