【C语言】【逻辑非】双感叹号的用法

简介: 【C语言】【逻辑非】双感叹号的用法

关于!的用法温习


经典如是说


  • 《C Programming Language》


  • By definition,the numeric value of a relational or logical expression is 1 if the relation is true,and 0 if the relation is false.The unary negation operator converts a non-zero operand into 0, and a zero operand in 1.


  • 《ISO/IEC 9899:201x》


The result of the logical negation operator ! is 0 if the value of its operand compares


unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.


The expression !E is equivalent to (0==E).


简而言之


以!(cond)为例来说明:


  • 取非运算,将cond和0比较;


  • 结果为int类型的值;


例子


- if  (flag)    # flag为非0,则if条件判断为真
- if (!flag)    # flag为0,  则if条件判断为真


关于!!(cond)


!!的含义


  • !!(cond)等价于!(!cond),进行两次!运算,所以具体值如下面表格所示:


v/op ! !!
0 1 0
1(nonzero) 0 1


也即:


!!(0) = 0
   !!(1) = 1
   !!(nonzero) = 1


!!的例子


#define IS_CAP_OF_XXX_FUNC (0x0000 0100)
INT32 cap = 0;
INT32 isSupportXXX = 0;
cap = get_chip_capability(); #读取芯片能力集
isSupportXXX = !!(cap & IS_CAP_OF_XXX);  #为1表示支持XXX功能,0表示不支持XXX功能;


实际,!!只是缩短了代码行数,用if判断可达到同样的目的。

相关文章
|
2天前
|
算法 编译器 C语言
C语言猜数字小游戏(也包含python实现的用法)
本文基于VS2022、pycharm和前面的知识,写一个凭借分支与循环的小游戏,比如: 写一个猜数字游戏 游戏要求: 电脑自动生成1~100的随机数 玩家猜数字,猜数的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束 在pyhton中生成随机数是比较简单的,可以直接导入random的包,直接生成随机数,导致写猜数字小游戏变成了判读语句和循环语句嵌套就能写出来,所以我不做过多的介绍了,可以直接看后面的代码展示,想了解更多的python可看python的基础知识,这里面有我在学习python的过程中写的笔记
35 0
|
2天前
|
C语言
C语言操作符逻辑与,逻辑或面试真题(2)
C语言操作符逻辑与,逻辑或面试真题(2)
|
2天前
|
编译器 C语言
C语言的转义字符,转义字符的用法
C语言的转义字符,转义字符的用法
|
2天前
|
C语言
C 语言中布尔值的用法和案例解析
在编程中,您经常需要一种只能有两个值的数据类型,例如: - 是/否 - 开/关 - 真/假 为此,C语言有一个 `bool` 数据类型,称为布尔值。
117 1
|
2天前
|
存储 C语言 索引
【c语言指针详解】复杂数据结构的指针用法
【c语言指针详解】复杂数据结构的指针用法
79 0
|
2天前
|
存储 C语言
【c语言指针详解】指针的基本概念和用法
【c语言指针详解】指针的基本概念和用法
73 0
|
7月前
|
C语言
通过模拟实现计算器介绍函数指针数组和回调函数的用法【C语言/指针/进阶】
通过模拟实现计算器介绍函数指针数组和回调函数的用法【C语言/指针/进阶】
47 0
|
2天前
|
C语言
条件操作符和逻辑操作符(C语言零基础教程)
条件操作符和逻辑操作符(C语言零基础教程)
|
2天前
|
Unix Linux 编译器
C语言中EOF的用法
C语言中EOF的用法
7 0
|
2天前
|
C语言
C语言中逻辑表达式的深入探讨
C语言中逻辑表达式的深入探讨
21 0