为什么c语言编写完感叹号不亮?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。优雅又高效,这不正是程序员毕生的追求嘛,毕竟优雅永不过时!
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com