加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 两个二进制数,将一个子集从一个复制到另一个

发布时间:2020-12-16 09:47:45 所属栏目:百科 来源:网络整理
导读:假设我有两个二进制数00110010和11101110,我想将最后4个值从第二个复制到第一个以形成二进制数00222220.有两种字节(或更大)的按位运算是否有干净的方法数据类型).假设二进制打包数据类型. 此外,是否存在可以复制任何子集的此问题的通用解决方案.假设我想将一
假设我有两个二进制数00110010和11101110,我想将最后4个值从第二个复制到第一个以形成二进制数00222220.有两种字节(或更大)的按位运算是否有干净的方法数据类型).假设二进制打包数据类型.

此外,是否存在可以复制任何子集的此问题的通用解决方案.假设我想将一些中间3位从一个数字复制到另一个数字,那么实现这一目标的最佳方法是什么?

解决方法

如果你有输入x和y,并且想要将一组特定的位从x复制到y,比如,在某个变量m(你要复制的位的掩码)中为1的位,可以按如下方式完成:

int copy(int x,int y,int m) {
    return ((x & m) | (y & (~m)));
}

这也适用于大于或小于整数的东西,如字符,短裤,长条等.

取(x& m)将仅给出x中的位,其中m在该位置具有1,并且
(y&(~m))将仅给出y中的位,其中m在该位置没有1.

然后将它们与|进行OR运算给出其中m具有1的位置中的位来自x的值,并且其中m具有0的位置中的位来自y.

您的特定情况将具有x = 0xee,y = 0x32和m = 0xF.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读