在C语言中何时使用双逻辑非(!!)?

17 浏览
0 Comments

在C语言中何时使用双逻辑非(!!)?

在C语言中,对于两次否定有什么有效的用途?例如,像下面这样的代码:\n

if (!!my_cond) {
}

\n据我了解,`!!`的作用是确保当`my_cond`为`false`时,`!!my_cond`的值为0,否则为1。你何时会需要使用这种方式?

0
0 Comments

在C语言中,使用双重逻辑非(!!)可以将逻辑表达式转换为0或1,以便与其他逻辑表达式进行比较。这样可以实现一些在其他情况下可能失败的逻辑布尔比较。C语言自C99开始就有了bool类型。以下是一个例子:

int x = 63;
printf("Output: %d  %d  %d\n", x, !x, !!x);

输出结果为:63 0 1

这里使用双重逻辑非(!!)将变量x转换为逻辑表达式的结果,即非零值转换为1,零值转换为0。这样可以实现将非零值转换为真(true),零值转换为假(false),从而进行逻辑布尔比较。

在C语言中,使用双重逻辑非(!!)的原因是为了将表达式转换为逻辑布尔值进行比较。解决方法就是直接使用双重逻辑非(!!)操作符,将表达式转换为逻辑布尔值。这样可以方便地进行逻辑布尔比较,避免了使用其他方法转换变量类型的麻烦。

0
0 Comments

双逻辑非(!!)在C语言中的使用场景是什么?

在你展示的上下文中,双逻辑非是无用的,因为值本身会被评估为0或1。

它在不进行"布尔"转换的上下文中可能会有用,比如算术或索引。

size_t zerovalues[2] = { 0, 0, };
for (size_t i = 0; i < N; ++i)
    ++zerovalues[!!A[i]];

最终,你会在`zerovalues[0]`中得到数组`A`中值为0的数量,而在`zerovalues[1]`中得到不为0的数量。

双逻辑非(!!)的使用场景和解决方法就是这些。

0
0 Comments

当在C语言中使用双重逻辑非(!!)时,它可以将某个值转换为布尔表达式。如果foo = !!foo,那么如果foo不为零,则结果为1,如果foo已经为零,则结果为0。

关于这个问题的解答可以在这里找到:Confused by use of double logical not (!!) operator。然而,我认为该链接并没有真正提供关于可能使用情况的解答。

0