当前位置: 技术问答>linux和unix
c程序中两个感叹号代表什么含义?
来源: 互联网 发布时间:2016-02-27
本文导语: 最近在分析linux下的一个驱动的源代码时,发现有两个连续的!,如下: ret = fusionee_new (fusion_devs[minor], !!(file->f_flags & O_APPEND), &fusionee); 其中的!!(file->f_flags & O_APPEND) 为什么这里出现两个感叹号?难道表示非非,...
最近在分析linux下的一个驱动的源代码时,发现有两个连续的!,如下:
ret = fusionee_new (fusion_devs[minor], !!(file->f_flags & O_APPEND), &fusionee);
其中的!!(file->f_flags & O_APPEND)
为什么这里出现两个感叹号?难道表示非非,如果这样,有什么意义?
望高人指点一下!
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
int main(void)
{
int b0 = 3 , b1 = 7;
printf("b0 = %d, b1 = %dn", b0, b1);
printf("(b0 & b1) = %dn", (b0 & b1));
printf("!(b0 & b1) = %dn", !(b0 & b1));
printf("!!(b0 & b1) = %dn", !!(b0 & b1));
return 0;
}
* 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
int main(void)
{
int b0 = 3 , b1 = 7;
printf("b0 = %d, b1 = %dn", b0, b1);
printf("(b0 & b1) = %dn", (b0 & b1));
printf("!(b0 & b1) = %dn", !(b0 & b1));
printf("!!(b0 & b1) = %dn", !!(b0 & b1));
return 0;
}