前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言中的双重否定

C语言中的双重否定

作者头像
Qt君
发布2020-03-19 17:33:36
2.6K0
发布2020-03-19 17:33:36
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

❝来自于linux内核中的一段代码挺有意思的,分享给大家。❞

  下列代码的目的是「将"分支转移"的信息提供给编译器,这样可以让编译器对其代码进行优化,以减少指令跳转带来的性能下降」__builtin_expect的意思是「允许程序员将最有可能执行的分支告诉给编译器」

#define likely(x)   __builtin_expect(!!(x), 1) /* x很可能为真 */       
#define unlikely(x) __builtin_expect(!!(x), 0) /* x很可能为假 */

例如:

if (likely(var))    /* if (var) */
if (unlikely(var))  /* if (!var) */

「我们看到它使用了双重否定(逻辑非),它的作用是让表达式转换为布尔型」。 例如:

int x = 1;
bool b = !!x;

还可以这样:(关于not关键词请查看往期文章:「C++替代关键词(and,or,not)」)

int x = 1;
bool b = not not x;

但实际代码中Qt君认为这样写更明确:

bool b = (x != 0);
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档