gpt4 book ai didi

c - Qt Creator + GDB + MingW - 按位和问题

转载 作者:行者123 更新时间:2023-11-30 14:42:59 25 4
gpt4 key购买 nike

我尝试评估按位与运算结果的评估方式。我在 Windows 上使用 Qt Creator + GDB + MingW。

我做了一个简单的测试:

#define BITMASK_CAN_JUMP 1 << 0 // 0x0001
#define BITMASK_CAN_WALK 1 << 1 // 0x0010

unsigned int data = BITMASK_CAN_JUMP | BITMASK_CAN_WALK;
...
if (data & BITMASK_CAN_WALK) {
printf("%d", data & BITMASK_CAN_WALK);
printf("can walk\n");
}
...

在 GDB 中设置监视 (data & 0x0010) 给出的值是 0,因为 0x0010 = 0b10000 这是正确的。 if 条件评估为 true,因为该值评估为 2。对我来说,调试器似乎通过将 0x0010 视为十六进制值来正确运行,而程序本身进行某种隐式转换,例如将数据后面的值转换为十六进制值。我不明白为什么在使用 GDB 时数据也没有转换为十六进制。有人可以向我澄清一下情况吗?

最佳汤姆

最佳答案

这些是定义的正确值:

#define BITMASK_CAN_JUMP 1 << 0 // 0b0001
#define BITMASK_CAN_WALK 1 << 1 // 0b0010

您可能至少想在 1 << 0 周围加上大括号和1 << 1 ,但那是另一个故事了。无论如何,data变成0b10 | 0b01 ,即0b11 ,或3以十进制表示。

(data & BITMASK_CAN_WALK)0b11 & 0b10 ,即0b10 ,或2以十进制表示。

因此,if (data & BITMASK_CAN_WALK)被采用,因为它不是 0 (在 C++ 中,它将被隐式转换为 true ),并打印上述 2 。 。如果将格式说明符更改为 #010x你会发现它确实是 0x2 .

这里没有任何值 0x0010 (16 十进制),如果您看到该值,则可能存在显示错误。

关于c - Qt Creator + GDB + MingW - 按位和问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54200757/

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