如何切换数字的某些位?例如,给定位表示(仅作为示例,语法肯定是错误的!):
someNumber = 00110111
changeNumber = 11100110
那么如何在不更改someNumber
的其余位的情况下,使用changeNumber
的最右位更改someNumber
的最右位?结果将是:
00110111 //someNumber
11100110 //changeNumber
________
00110110
答案 0 :(得分:3)
提取changeNumber
的最右位:
changeNumber & 1
删除someNumber
的最右位:
someNumber & ~1
和他们在一起:
(changeNumber & 1) | (someNumber & ~1)
要设置位 n ,请将1更改为 2 n 。
答案 1 :(得分:1)
我建议采取以下步骤:
清除someNumber
的最后一位。
someNumber &= ~1
提取changeNumber
int lastBit = changeNumber & 1;
设置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