关于!的用法温习

经典如是说

  • 《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判断可达到同样的目的。

如本文对你有些许帮助,欢迎大佬打赏:
支付宝及微信打赏方式

【C语言】【逻辑非】双感叹号的用法相关推荐

  1. 【JS】单感叹号 和 双感叹号 的用法

    文章目录 用法 示例 用法 双感叹号!!可以将一个值转换成对应的Boolean值, 第一个感叹号!是将其转化成取反后的Boolean类型的值 第二个感叹号!!是将取反后的Boolean类型的值再进行一 ...

  2. c语言 感叹号啥作用,C语言中的双感叹号的作用

    两个!是为了把 非0值 转换成1,而0值还是0. 因为C语言中,所有 非0值 都表示真.所以!非0值 = 0,而!0 = 1. 所以!!非0值 = 1,而!!0 = 0. 示例如下: #include ...

  3. c语言中输出字母时有个感叹号,C语言中的双感叹号的作用

    两个!是为了把 非0值 转换成1,而0值还是0. 因为C语言中,所有 非0值 都表示真.所以!非0值 = 0,而!0 = 1. 所以!!非0值 = 1,而!!0 = 0. 示例如下: #include ...

  4. C语言中的双感叹号的作用

    两个!是为了把 非0值 转换成1,而0值还是0. 因为C语言中,所有 非0值 都表示真.所以!非0值 = 0,而!0 = 1. 所以!!非0值 = 1,而!!0 = 0. 示例如下: #include ...

  5. C语言中双感叹号的作用

    1.C语言中双感叹号的作用 (1)感叹号的作用:感叹号是逻辑运算符,表示逻辑非,也就是把真变成假,把假变成真: (2)在C语言中,0值表示假,非0值都是真,所以感叹号会把非0值变成0,而把0值变成1: ...

  6. js中!!的用法(双感叹号)

    在javascript代码中经常会见到!!的情况,本文即以实例形式较为深入的分析javascript中2个感叹号的用法.分享给大家供大家参考之用.具体分析如下: javascript中的!!是逻辑&q ...

  7. 双逻辑非(!!)操作符

    双逻辑非操作符的作用 双逻辑非操作,会把一个值(数字,字符串-..)转换为布尔值.第一次逻辑非操作取反的布尔,第二次获得最初元素本身对应的布尔. alert(!!false); //falsealer ...

  8. c语言:关于逻辑运算符(逻辑与、逻辑或和逻辑非)不易混淆的记忆方法

    在初学C语言时,初学者在逻辑运算符及其优先级问题上很容易弄混或记错,所以我为这三种逻辑运算符做个易于初学者学习的整理: 在进行逻辑运算时,非0为真(正确),结果为1:0即为假(错误),结果为0 一.逻 ...

  9. javaScript 双感叹号用法

    在偶尔看源码的过程中. 看到有些判断的用法是: var a; if(!!a){console.log('打印')} 为什么要用两个感叹号(❕)呢? 因为js 是弱类型,单纯用一个! 感叹号去转义可能会 ...

最新文章

  1. android webview详情,Android中的WebView详细介绍
  2. 《研磨设计模式》chap20 享元模式 Flyweight (1)前奏介绍
  3. 1096 Consecutive Factors (20 分)【难度: 一般 / 爆搜 数论】
  4. Geography爱好者 QGIS WGS84转其它坐标系并计算坐标
  5. python脚本变成exe_Python脚本转exe文件
  6. bootstraptable控制分页_bootstrap-table后端分页功能完整实例
  7. 一个技术管理者的苦逼【技术管理漫谈】
  8. 计算机组成原理期末复习往年卷子
  9. Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
  10. scrapy splash 爬取图片学习心得
  11. php滑动轮播效果,js实现移动端手指滑动轮播图效果
  12. 【写给以前的自己】python中,既生list何生tuple?简论学习数据结构(e.g.哈希化)对自己的提升
  13. machine learning (7)---normal equation相对于gradient descent而言求解linear regression问题的另一种方式...
  14. git提交代码的两种方法步骤
  15. 建模与仿真matlab论文,基于matlab风力发电系统的建模与仿真毕业设计论文
  16. 弘辽科技:拼多多直通车测款是怎样操作的
  17. flutter之出现 List is not a subtype of type 问题
  18. JAVA前端————HTML—W3C—基本标签—超链接锚链接
  19. 爱了!阿里P9开源分享内部Java核心开发手册(2022版)覆盖P5到P8
  20. 室内定位技术研发简介

热门文章

  1. 计算机科学与技术部分图书书评
  2. 2022人工智能数学基础1-2(许志钦
  3. 手工爱好者统一关注的国外优秀手工DIY网站
  4. tpg色卡查询_TPG色卡新增色-210色
  5. 网页中无法使用摄像头的解决办法
  6. c语言输出 inf是什么意思,cuffdiff 输出文件中的inf和nan的意思
  7. [ STK ](五)使用 Matlab,实现 STK 动画场景控制
  8. 多媒体文件播放器汇总
  9. android源码环境下编译fourthling.cling库的依赖问题
  10. 2019-12-14 爬网页10-多进程下载漫画网站图片(requests+lxml+fake_useragent+multiprocessing)