您的位置:程序门 -> linux/unix社区 -> 内核及驱动程序研究区



c程序中两个感叹号代表什么含义?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


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

望高人指点一下!
发表于:2007-06-30 23:45:451楼 得分:0
负负得正?
发表于:2007-07-01 05:19:282楼 得分:0
关注!
发表于:2007-07-01 05:40:063楼 得分:0
非的非嘛,相当没有加
发表于:2007-07-01 11:47:504楼 得分:0
会不是是笔误啊。
发表于:2007-07-01 13:55:545楼 得分:10
/*
  *   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;
}
发表于:2007-07-31 12:58:216楼 得分:0
vvvvvvv


快速检索

最新资讯
热门点击