使用按位 NOT(无 XOR)反转特定位

use*_*515 2 c bit-manipulation

如何使用按位非反转 x 数字的特定位?我知道我们可以使用 XOR 和掩码来做到这一点,但问题需要使用 NOT。

我需要反转从给定位置开始的一组位。函数内的变量包括原始值、要开始的位置和宽度=我要反转的位数。

我使用移位位从给定位置开始,但如何确保使用 NOT Bitwise 函数仅反转 x 个位数?

chu*_*ica 6

异或的定义:a ^ b <--> (a & ~b) | (~a & b)

unsigned x = 0x0F;
unsigned mask = 0x44;  // Selected bits to invert

unsigned selected_x_bits_inverted = (x & ~mask) | (~x & mask);
printf("%02X\n", selected_x_bits_inverted);
// 4B
Run Code Online (Sandbox Code Playgroud)