ash*_*gpu 3 c binary bit-manipulation
我试图在c中执行以下操作:
unsigned int mask;
unsigned int previous;
unsigned int new;
unsigned int out;
for( int i = 0; i < 8; ++i )
{
bool bit_set = GET_BIT( mask, i );
// If the mask bit is true, use the new bit, otherwise use the previous bit
SET_BIT( out, i, GET_BIT( bit_set ? new : previous, i ) );
}
Run Code Online (Sandbox Code Playgroud)
但是我认为使用按位运算可能会更容易,更快捷.我有真值表,但我不知道如何获得我需要的表达式.
真相表是:
m | p | n | o
0 | 0 | 0 | 0
1 | 0 | 0 | 0
0 | 1 | 0 | 1
1 | 1 | 0 | 0
0 | 0 | 1 | 0
1 | 0 | 1 | 1
0 | 1 | 1 | 1
1 | 1 | 1 | 1
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题呢?
使用卡诺图 - 在线提供解算器.选择"三个值",输入所有八个组合的预期结果,并使用求解器生成的表达式:
F(m, p, n) = (p & !n) | (m & n)
Run Code Online (Sandbox Code Playgroud)
编辑:你可以扩展这个解决方案,一次完成整个字节,而不是一次一个地做,通过使用~按位NOT运算符:
result = (mask & new) | (~mask & previous);
Run Code Online (Sandbox Code Playgroud)