!!用法

c程序中两个感叹号代表什么含义?
最近在分析linux下的一个驱动的源代码时,发现有两个连续的!,如下: 
          ret   =   fusionee_new   (fusion_devs[minor],   !!(file-> f_flags   &   O_APPEND),   &fusionee); 
其中的!!(file-> f_flags   &   O_APPEND) 
为什么这里出现两个感叹号?难道表示非非,如果这样,有什么意义? 

望高人指点一下!

------解决方案--------------------
/* 
* Q: 
* 最近在分析linux下的一个驱动的源代码时,发现有两个连续的!,如下: 
* ret = fusionee_new (fusion_devs[minor], 
* !!(file-> f_flags & O_APPEND), &fusionee); 
* 其中的!!(file-> f_flags & O_APPEND) 
* 为什么这里出现两个感叹号?难道表示非非,如果这样,有什么意义? 
* 望高人指点一下! 

* A: 
* 当然是用的,这样保证传入的值只有两种情况,(0)或(!0) 

* O: 
* b0 = 3, b1 = 7 
* (b0 & b1) = 3 
* !(b0 & b1) = 0 
* !!(b0 & b1) = 1 
*/ 

#include <stdio.h> 

int main(void) 

int b0 = 3 , b1 = 7; 

printf( "b0 = %d, b1 = %d\n ", b0, b1); 
printf( "(b0 & b1) = %d\n ", (b0 & b1)); 
printf( "!(b0 & b1) = %d\n ", !(b0 & b1)); 
printf( "!!(b0 & b1) = %d\n ", !!(b0 & b1)); 

return 0; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值