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”)
你看了位移位运算符了吗?