C 交换位元

C 交换位元,c,bit-shift,bits,C,Bit Shift,Bits,如何切换数字的某些位?例如,给定位表示(只是一个示例,语法肯定是错误的!): 那么,如何在不更改someNumber的其余位的情况下,将someNumber的最右位更改为changeNumber的最右位?因此,结果将是: 00110111 //someNumber 11100110 //changeNumber ________ 00110110 和掩码为00000001的changenumber,因此提取最低位的状态,所有其他设置为0:00000000 和掩码为11111110的so

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

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

00110111   //someNumber
11100110   //changeNumber
________
00110110

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

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


或者将两个结果合并在一起,因此:00110110

提取
changeNumber
的最右位:

changeNumber & 1
someNumber & ~1
someNumber |= lastBit;
删除someNumber的最右位:

changeNumber & 1
someNumber & ~1
someNumber |= lastBit;
和/或它们一起:

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

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

我建议执行以下步骤:

  • 清除
    someNumber
    的最后一位

    someNumber &= ~1
    
  • 提取
    changeNumber的最后一位

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

    changeNumber & 1
    
    someNumber & ~1
    
    someNumber |= lastBit;
    

  • 其中一条路线与马丁相似

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


    你看了位移位运算符了吗?