切换位

时间:2015-11-15 03:42:37

标签: c bit-shift bits

如何切换数字的某些位?例如,给定位表示(仅作为示例,语法肯定是错误的!):

someNumber = 00110111
changeNumber = 11100110

那么如何在不更改someNumber的其余位的情况下,使用changeNumber的最右位更改someNumber的最右位?结果将是:

00110111   //someNumber
11100110   //changeNumber
________
00110110

4 个答案:

答案 0 :(得分:3)

提取changeNumber的最右位:

changeNumber & 1

删除someNumber的最右位:

someNumber & ~1

和他们在一起:

 (changeNumber & 1) | (someNumber & ~1)

要设置位 n ,请将1更改为 2 n

答案 1 :(得分:1)

我建议采取以下步骤:

  1. 清除someNumber的最后一位。

    someNumber &= ~1
    
  2. 提取changeNumber

    的最后一位
    int lastBit = changeNumber & 1;
    
  3. 设置someNumber的最后一位:

    someNumber |= lastBit;
    

答案 2 :(得分:1)

与Martin相似,

测试someNumber的最后一位,并使用结果选择更改某个数字的操作('按位和'或'按位或')

#DEFINE SWITCH_MASK_OR 0b00000001
#DEFINE SWITCH_MASK_AND (~SWITCH_MASK_OR)
...
result = changeNumber & SWITCH_MASK_OR ? \
         someNumber | SWITCH_MASK_OR : someNumber & SWITCH_MASK_AND;

答案 3 :(得分:0)

和掩码为00000001的更改数字,因此提取最低位的状态,所有其他位设置为0:00000000

和掩码为11111110的somenumber,所以将最低位设置为0,而其余部分保持不变:00110110

或者两个结果一起,所以:00110110