繁体   English   中英

切换位

[英]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

我建议采取以下步骤:

  1. 清除someNumber的最后一位。

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

     int lastBit = changeNumber & 1; 
  3. 设置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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM