根据位掩码合并两个位域 [英] Merge two bitfields according a bitmask

查看:7
本文介绍了根据位掩码合并两个位域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道是否可以使用位操作来根据位掩码合并两个位域? 例如,我有两个值和一个位掩码:

char mask = 0x29; // 0010 1001
char a = 0x9;     // 0000 1001 original value
char b = 0xE8;    // 1110 1000 modified value
我想根据位掩码将b中的位设置为a的值。只有3位会受到影响。

char val = 0xC9;  // 1100 1001 value

那么,我应该如何处理仅位运算?

提前谢谢。

推荐答案

首先,从b清除掩码中设置的位。然后,从a清除掩码中未设置的位。最后,OR两个结果合在一起:

b = (b & ~mask) | (a & mask);

代字号~运算符生成求反的掩码。ANDING WITH~mask将掩码中设置的b位清零。

这篇关于根据位掩码合并两个位域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆