[英]Switching the bits
如何切换数字的某些位? 例如,给定位表示形式(仅作为示例,语法肯定是错误的!):
someNumber = 00110111
changeNumber = 11100110
那我该怎么改变的最右边位someNumber
与最右边位changeNumber
不改变其余位someNumber
? 因此结果将是:
00110111 //someNumber
11100110 //changeNumber
________
00110110
提取changeNumber
的最右边的位:
changeNumber & 1
删除someNumber
的最右边的位:
someNumber & ~1
和或他们在一起:
(changeNumber & 1) | (someNumber & ~1)
要设置位n ,请将1更改为2 n 。
我建议采取以下步骤:
清除someNumber
的最后一位。
someNumber &= ~1
提取changeNumber
的最后一位
int lastBit = changeNumber & 1;
设置someNumber
的最后一位:
someNumber |= lastBit;
与马丁相似,
测试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;
AND changenumber的掩码为00000001,因此提取最低位的状态,所有其他位均设置为0:00000000
AND somenumber的掩码为11111110,因此将最低位设置为0,其余部分保持不变:00110110
或两个结果一起,所以:00110110
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.