C语言编程秘籍,两个感叹号!(!)的巧妙应用技巧揭秘

在C语言中,两个感叹号(!!)可以用来进行类型转换和逻辑非操作。
### 类型转换
在C语言中,如果需要将一个整数类型转换为布尔类型,可以使用两个感叹号。这是因为`!!`操作符会将任何非零值转换为1(真),将零转换为0(假)。
```c #include
int main() { int num = 5; int boolValue = !!num; // boolValue现在为1(真)
printf("The boolean value is: %d ", boolValue);
num = 0; boolValue = !!num; // boolValue现在为0(假)
printf("The boolean value is: %d ", boolValue);
return 0; } ```
### 逻辑非操作
两个感叹号也可以用来执行逻辑非操作。在逻辑非操作中,如果操作数是0,结果为1;如果操作数是非0,结果为0。
```c #include
int main() { int num = 0; int isZero = !!num; // isZero现在为0(假)
printf("Is num zero? %d ", isZero);
num = 5; isZero = !!num; // isZero现在为1(真)
printf("Is num zero? %d ", isZero);
return 0; }

相关阅读延伸:C语言小技巧两个感叹号(两个!)妙用

两个!是为了把 非0值 转换成1,而0值还是0。因为C语言中,所有 非0值 都表示真。所以!非0值 = 0,而!0 = 1。所以!!非0值 = 1,而!!0 = 0。

看看下面的真值表:

图一真值表

看看实例代码

int avcodec_is_open(AVCodecContext *s)
{
return !!s->internal;
}

如此,便把指针是否为空以0和1的形式表示了出来。

以前当我需要把一个字节或者一个int数据要用bit来区分两种含义的时候,假设一个字节变量 byte,可代表范围 0~255,0 代表false,1 ~255 代表true,我可能是这么写程序的

BYTE Byte2Bit(BYTE byte)

{

BYTE bit;
if(byte == 0)

{

bit = 0;

}

else

{

bit = 1;

}

return bit;

}

或者是

BYTE Byte2Bit(BYTE byte)

{

return (byte ? 1 : 0);

}

学会这个小技巧之后,我们再看看以上代码,是不是即臃肿又低效?因为以上程序需要用到判断,但是如下写的话,汇编一条指令就搞定。

BYTE Byte2Bit(BYTE byte)

{

return !!byte;

}

这样,不管原先 byte 是什么值,函数Byte2Bit运行结束都将返回 0 或 1。优雅又高效,这不正是程序员毕生的追求嘛,毕竟优雅永不过时!

发布于 2025-06-22 14:15
收藏
1
上一篇:电脑C盘飘红?别慌!6招轻松腾出十几GB空间 下一篇:吉他小白逆袭记,轻松秒变大神的神操作揭秘!