jab*_*jab 3 c c++ binary bit-manipulation
比方说,我有两个二进制数00110010和11101110,我想最后的4个值从第二复制到第一,形成一个二进制数00111110.在两个字节(或更大的数据类型)上使用按位运算是否有干净的方法.假设二进制打包数据类型.
此外,是否存在可以复制任何子集的此问题的通用解决方案.假设我想将一些中间3位从一个数字复制到另一个数字,那么实现这一目标的最佳方法是什么?
如果你有投入x和y,并希望一组特定的位由复制x到y,说,那是位1S IN一些变量m(一个面膜你要复制的位),如下这是可以做到:
int copy(int x, int y, int m) {
return ((x & m) | (y & (~m)));
}
Run Code Online (Sandbox Code Playgroud)
这也适用于大于或小于ints的东西,例如chars,shorts,longs等.
服用(x & m)只会给在比特x用于其m具有1在该位置,并
(y & (~m))只将给予在比特y针对m不具备1在该位置.
然后将这些或运算一起|给其在该位置位值m有一个1来自x,并且其在该位置位m有一个0来自y.
你的具体情况会有x = 0xee,y = 0x32和m = 0xF.
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |