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