当掩码应用于变量时,“if”语句不会执行,即使它应该执行

问题描述 投票:0回答:1

在我的示例中,我创建了一个名为 testVar 的整数变量,并使其等于十六进制的 a1。当打印出变量时,它表明它确实应该等于十六进制的a1。现在,当检查 if 语句中的 testVar 是否等于 a1 时,if 语句仅在没有任何掩码应用于变量时执行。

我的问题是“为什么当变量应用了掩码时这些 if 语句不执行?”。

#include <stdio.h>

int testVar = 0xA1;   // testVar should equal 0x000000A1 now

void main() {
    printf("%x \n", testVar);               // Should prove that testVar is indeed equal to a1 in hex
    printf("%x \n", testVar & 0x000000ff);  // Both printf functions are outputting a1

    if (testVar == 0x000000A1) {      // This 'if' statement works!
        printf("success1");
    }
    if (testVar & 0x000000ff == 0x000000A1) { // This doesn't execute
        printf("success2");
    }
    if (testVar & 0x000000FF == 0xA1) {      // This doesn't execute
        printf("success3");
    }
}
c if-statement hex mask
1个回答
2
投票

等号运算符

==
的优先级高于二进制按位与运算符
&
。 这意味着:

if (testVar & 0x000000ff == 0x000000a1)

解析如下:

if (testVar & (0x000000ff == 0x000000a1))

这不是你想要的。 使用括号确保正确分组:

if ((testVar & 0x000000ff) == 0x000000a1)

同样:

if ((testVar & 0x000000ff) == 0xa1)
© www.soinside.com 2019 - 2024. All rights reserved.