用法!!检查标志

时间:2018-03-28 05:20:57

标签: c

我在开源库中看到了一些代码。他们检查是否在带有测试的变量中设置了特定标志!!(flag & FLAG1)

我的问题是,为什么不简单地写一下(flag & FLAG1)呢?第一个版本是否更加优化?

3 个答案:

答案 0 :(得分:7)

可以这样使用:

int a=!!(flag & FLAG1);

如果flag & FLAG1评估为0,则a将被指定为0.如果flag & FLAG1评估为其他值,则a将被指定为1。

答案 1 :(得分:1)

<div class="container-mod"><h1>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corrupti doloribus beatae laboriosam aspernatur magni, molestias possimus, rerum voluptates dolorum aliquam est soluta animi inventore ut at eius voluptatum quod omnis.</h1></div>转换为相反的布尔值,然后转换回来。第一个逻辑运算符将任何返回值转换为相反的布尔值,然后第二个逻辑运算符将转换相反的值。

例如:

!!

bool b = !!(flag & FLAG1); 返回值转换为布尔值。

除非您想混淆源代码,否则不要使用此类语句。相反,您可以使用普通转换来清楚地表达您想要做的事情

flag & FLAG1

答案 2 :(得分:1)

如果没有更多的上下文,很难知道作者这样做的原因,但最常见的是它将值转换为0或1.如果你使用__builtin_expect(),这个特别有意思,在这种情况下,是的,它可以产生更好的优化代码。

偶尔也会使用它来使代码更加自我记录......如果你看到它,你知道你的意思是将它视为真/假。通常,当像这样使用时,它是宏的一部分。

值得注意的是,无论原始类型如何,结果都是int。这通常不是 重要的,但有时它很重要。