C语言中的位操作(8)根据指定掩码选择两数之一

unsigned int a;    // value to merge in non-masked bits
unsigned int b;    // value to merge in masked bits
unsigned int mask; //if mask=1,结果数据从b中选择,else 从a中选择
unsigned int r;     //结果r= (a & ~mask) | (b & mask)

r = a ^ ((a ^ b) & mask); 

C测试代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     unsigned int a;   
 7     unsigned int b;   
 8     unsigned int mask; 
 9     unsigned int r;    
10     a=2;  b=4;  mask=0;
11     r = a ^ ((a ^ b) & mask); 
12     printf("%d\n",r);
13     getchar();
14     getchar();
15     return 0;
16   }
17 
18   /*
19      a:00000010
20      b:00000100
21      ^---------
22  (a^b):00000110
23   mask:00000000
24      &---------
25        00000000
26      a:00000010
27      ^---------
28        00000010
29 
30 ------------------------
31      a:00000010
32      b:00000100
33      ^---------
34  (a^b):00000110
35   mask:00000001
36      &---------
37        00000000
38      a:00000010
39      ^---------
40        00000010
41 
42        */
作者:xueda120
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文地址:https://www.cnblogs.com/xueda120/p/3134304.html