C语言glib代码中return !!myVar及双感叹号运算符的含义是什么?
C语言中
!!操作符的作用解释 本质原理
!!并不是C语言内置的特殊操作符,只是两次逻辑非操作符!的连续使用,作用是将任意数值标准化为布尔型的0/1取值:
- 第一个
!:对输入值取逻辑非,所有非0的输入都会被转换为0,输入为0时会被转换为1 - 第二个
!:对第一次取反的结果再取反,最终效果就是:任意非0原值输出为1,原值为0输出为0
代码逻辑拆解
你提到的代码片段如下:
gboolean function() { guint myVar = 0; myVar = (!!globalVar1 + !!globalVar2 + !!globalVar3); return !!myVar; }
- 对三个全局变量分别使用
!!处理后,每个变量都会被转为0或1,求和后myVar的值就是三个全局变量里非0变量的总个数,取值范围是0~3 return !!myVar的作用是:只要三个全局变量里至少有一个非0(即myVar >=1),就返回1;只有三个变量全为0时才返回0。这种写法保证返回值严格符合glib的gboolean类型定义:TRUE对应1、FALSE对应0,避免直接返回myVar时出现2、3这类非标准布尔值的问题。
内容的提问来源于stack exchange,提问作者ad_valle
相关产品推荐
相关产品推荐

