日期:2014-05-16  浏览次数:21089 次

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;
}