当掩码应用于变量时,即使应该执行,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个回答
0
投票

等号运算符

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

if (testVar & 0x000000ff == 0x000000a1)

解析如下:

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

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

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

同样:

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