清除低16位

123*_*123 6 c bit-manipulation bitwise-operators

对于按位运算符我不是很好所以请原谅这个问题,但是如何清除C/C++中32位整数的低16位?

例如,我有一个整数:0x12345678,我想这样做:0x12340000

tem*_*def 15

要清除任何特定的位组,可以使用按位AND和在这些位置具有1的数字的补码.在您的情况下,由于数字0xFFFF的低16位设置,您可以与其补码:

b &= ~0xFFFF; // Clear lower 16 bits.
Run Code Online (Sandbox Code Playgroud)

如果要设置这些位,则可以使用按位OR和具有这些位设置的数字:

b |= 0xFFFF; // Set lower 16 bits.
Run Code Online (Sandbox Code Playgroud)

并且,如果您想要翻转这些位,您可以使用带有这些位设置的数字的按位XOR:

b ^= 0xFFFF; // Flip lower 16 bits.
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!