请教 表达式 !!(x) 和 (x)有什么差别吗?
时间:2010-11-24
来源:互联网
请教 表达式 !!(x) 和 (x)有什么差别吗?
比如下面这个宏
# define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1))
!!(x) 和 x 不是相等的吗?
比如下面这个宏
# define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1))
!!(x) 和 x 不是相等的吗?
作者: Linux386 发布时间: 2010-11-24
类型不一样.
作者: smalloc 发布时间: 2010-11-24
如果x不为0,!!(x)可以把x变成1
作者: 论坛ID 发布时间: 2010-11-24
本帖最后由 论坛ID 于 2010-11-24 13:55 编辑
这个问题在《professional linux kernel architecture》里面有讨论,在1199页。
复制代码
这个问题在《professional linux kernel architecture》里面有讨论,在1199页。
- #define likely(x) __builtin_expect(!!(x), 1)
- #define unlikely(x) __builtin_expect(!!(x), 0)
- The double negation !! is used for two reasons:
- ❑ It enables the macros to be used with pointers that are implicitly converted into a truth value.
- ❑ Truth values greater than zero (explicitly allowed in C) are standardized to 1 as expected by __builtin_expect.
作者: 论坛ID 发布时间: 2010-11-24
2 楼正解。
其实这样的问题,完全可以自己先实验一下。
x = 100,看一下这两个表达式执行结果是什么。
其实这样的问题,完全可以自己先实验一下。
x = 100,看一下这两个表达式执行结果是什么。
作者: Godbach 发布时间: 2010-11-24
回复 论坛ID
非常感谢!了解了
非常感谢!了解了
作者: Linux386 发布时间: 2010-11-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28