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        */

 

转载于:https://www.cnblogs.com/xueda120/archive/2013/06/13/3134304.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值