根据现在给出的 4 个值,运算出 0b1011-1111 即可 。
令:
A = 0xfc = 0b 1111-1100
B = 0x55 = 0b 0101-0101
C = 0x1F = 0b 0001-1111
D = 0x02 = 0b 0000-0010
观察到 C 0b0001-1111 和目标值 0b1011-1111 的低 5 位 值相同 , B 的高 3 位取反后跟目标值高三位相同 。
得: 目标值 = ( ~B | C ) & 0xFF
0x FF 可又 A | C 得到 。
最后整理代码如下 :
#include<stdio.h>
int func(int a, int b, int c, int d, int num)
{
return ( (~b | c) ^ num ) & (a | c);
}
int main(void)
{
int a=0xfc, b=0x55, c=0x1f, d=0x02;
printf("num =1 is 0x%d, num =2 is 0x%d.\n", func(a, b, c, d, 1), func(a, b, c, d, 2));
return 0;
}