Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt Creator+GDB+MingW-按位和问题_C_Qt_Gdb_Mingw - Fatal编程技术网

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

Qt Creator+GDB+MingW-按位和问题,c,qt,gdb,mingw,C,Qt,Gdb,Mingw,我尝试评估如何计算按位和运算结果。我在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

我尝试评估如何计算按位和运算结果。我在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中为数据设置一个watch&0x0010会给我一个值0,因为0x0010=0b10000是正确的。if条件的计算结果为true,因为该值的计算结果为2。在我看来,调试器的行为似乎是正确的,它将0x0010视为十六进制值,而程序本身获得某种隐式转换,例如将数据后面的值转换为十六进制值。我不明白为什么数据在使用GDB时也不能转换成十六进制。 有人能向我澄清一下情况吗

最好的
Tom

这些是定义的正确值:

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

你可能至少想用0b0010在GDB中正确工作,在1周围加上大括号。BITMASK_CAN_WALK 1是的,我是说。在GDB中,位掩码以某种方式显示为0x0010。这就是为什么我问自己,为什么define的计算结果似乎是0x0010,以及在运行代码时参与了哪种不可见的转换。对我来说,它看起来像是数据&0x0010,这是我从IDE获得的定义行为在GDB中与实际程序不同的值。谢谢。这就是我的想法,也是我理解它的方式。可能是预处理定义的显示问题。使用相同的位掩码创建常量无符号整数可以在GDB中显示正确的值。