C 为什么使用位掩码0x30000会产生与使用0x3不同的结果<&书信电报;16?
今天我写了一个程序,但有点问题,所以我做了这个测试程序。嗯,C 为什么使用位掩码0x30000会产生与使用0x3不同的结果<&书信电报;16?,c,C,今天我写了一个程序,但有点问题,所以我做了这个测试程序。嗯,0x30000等于0x3你只是被宏是文本替换的事实击中了,这就是它们 这: 将被编译器视为: num &= ~0x3 << 16; 如果不将宏括在括号内,就不能将其定义为表达式,因为您不知道宏将如何使用。我想您忘记了括号:试试看 #define MASK2 (0x3 << 16) #定义MASK2(0x3,因为~的优先级高于的可能副本 num &= ~MASK2; num &= ~0
0x30000
等于0x3你只是被宏是文本替换的事实击中了,这就是它们
这:
将被编译器视为:
num &= ~0x3 << 16;
如果不将宏括在括号内,就不能将其定义为表达式,因为您不知道宏将如何使用。我想您忘记了括号:试试看
#define MASK2 (0x3 << 16)
#定义MASK2(0x3,因为~
的优先级高于的可能副本
num &= ~MASK2;
num &= ~0x3 << 16;
#define MASK2 (0x3 << 16)
#define MASK2 (0x3 << 16)
~0x3<<16
~MASK2
(~0x3)<<16
~(0x3<<16)
0x30000 == 0x3<<16
~0x30000 == ~0x3<<16 // FALSE -> ~0x3<<16 = (~0x3)<<16