| 发表于: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; } | | |
|