如何处理按位运算问题

时间:2019-02-06 01:56:30

标签: binary bit-manipulation masking operation

问题:提供二进制掩码和按位操作以完成以下任务:

  1. 打开8位二进制数的位7,3,1(打开1,关闭0)。
  2. 切换8位二进制数的6,5,4位

到目前为止,我知道这是一个OR操作,因为1处于打开状态,但是我不知道如何提供遮罩。我必须将7,3,1转换为二进制然后提供掩码吗?

1 个答案:

答案 0 :(得分:0)

有关如何设置或切换位的详细信息,请参见以下问题:How do you set, clear, and toggle a single bit?。 您可以使用位移来设置/清除/切换单个位,例如

x |= (1UL << n); // Set bit n

或者您可以使用掩码,在其中定义所需的位。在这里,您首先需要创建一个掩码,在其中设置所需的所有位:

unsigned int myBinMask   = 0b00100001;              // Use bit 0 and 5
unsigned int myHexMask   = 0x1C                     // Use bit 2, 3 and 4
unsigned int myShiftMask = (1UL << 1) | (1UL << 7); // Use bit 1 and 7

然后像这样使用它:

x ^= myBinMask; // Toggel bit 0 and 5