给出两个二进制数,将一个子集从一个复制到另一个
GIven two binary numbers, copy a subset from one to another
假设我有两个二进制数00110010
和11101110
,我想将最后 4 个值从第二个复制到第一个,以形成一个 00111110
的二进制数。有没有干净的方法可以在两个字节(或更大的数据类型)上使用按位运算来做到这一点。假设二进制打包的数据类型。
另外,是否有解决此问题的通用解决方案,可以复制任何子集。假设我想将一些中间的 3 位从一个数字复制到另一个数字,实现此目的的最佳方法是什么?
如果您有输入x
和y
,并且想要将一组特定的位从x
复制到y
,例如,在某些变量m
(要复制的位的掩码)中1
s的位,可以按如下方式完成:
int copy(int x, int y, int m) {
return ((x & m) | (y & (~m)));
}
这也适用于大于或小于 int
s 的东西,例如 char
s、short
s、long
s 等。
取(x & m)
将只给出m
在该位置有1
的x
位,并且 (y & (~m))
将仅给出m
在该位置没有1
的y
位。
然后将这些与|
一起 OR 运算,以给出值,该值在m
具有1
的位置中的位来自x
,而m
具有0
的位置中的位来自y
。
您的特定情况将具有 x = 0xee
、 y = 0x32
和 m = 0xF
。
你可以试试这个
#include "stdio.h"
int main()
{
int a = 0x52;
int b = 0xee;
int c = (a&0xF0)|(b&0x0F);
printf(" %x %dn", c, c);
}
A 是 00110010
, B 是 11101110
相关文章:
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 检查数值类型是否是另一个数值类型的子集
- 将 std::variant 转换为另一个具有类型子集的 std::variant
- (也许是NP-Hard)求一个集合的子集总数,使得每个子集在与其所有元素相乘时的值都大于X
- C/C :提取一个枚举的子集以形成新的枚举
- C 从向量的子集返回一个随机值
- 给定一个正整数 N 作为输入,我如何找到数字子集中的乘积
- 如何检查字符串是否是另一个字符串的正确子集
- 确定一个向量是否是另一个向量的子集的有效方法
- 给出两个二进制数,将一个子集从一个复制到另一个
- 一个多索引,其中一个索引是整个集合的子集
- 向量,包含指向同一内存的另一个向量的部分子集
- 我可以将矩阵的子集传递到MKL中的另一个函数中吗
- 给定一个长度为n的数组,找到子集的数量,其中子集的XOR等于给定数量
- 选择一个垫子的子集并复制它们以在C++/Opencv中创建一个新垫子
- 优化检查一个比特向量是否是另一个的适当子集
- 线性算法找到最小子集和超过一个阈值
- 从一个集合生成所有可能的有序子集
- 在 Rcpp 中,为什么我不能将子集向量分配给另一个子集向量
- 如何编译c++文件的一个子集,使我不必编译其他文件MinGW