繁体   English   中英

什么是C中的&&&操作

[英]What is &&& operation in C

#include <stdio.h>

volatile int i;

int main()
{
    int c;

    for (i = 0; i < 3; i++) 
    {
         c = i &&& i;
         printf("%d\n", c);
    }

    return 0;
}

使用gcc编译的上述程序的输出是

0
1
1

使用-Wall-Waddress选项, gcc发出警告:

warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress]

如何在上述计划中评估c

这是c = i && (&i); ,第二部分是多余的,因为&i永远不会评估为false

对于用户定义的类型,你可以实际上重载一元运算operator & ,它可能是不同的,但它仍然是一个非常糟糕的主意

如果你打开警告 ,你会得到类似的东西:

警告:'i'的地址将始终评估为'true'

C中没有&&&运算符或标记。但是&& (逻辑“和”)和& (一元地址或按位“和”)运算符确实存在。

通过最大的蒙克规则,这个:

c = i &&& i;

相当于:

c = i && & i;

如果i&i都为真,则将c设置为1,如果其中任何一个为假,则将其设置为0。

对于int,任何非零值都为true。 对于指针,任何非null值都为true(并且对象的地址始终为非null)。 所以:

它设置c为1,如果i是非零,或者0 ,如果i是等于零。

这意味着&&&在这里被用于故意混淆。 作业也可以是以下任何一种:

c = i && 1;
c = !!i;
c = (bool)i;          // C++ or C with <stdbool.h>
c = i ? 1 : 0;        /* C */
c = i ? true : false; // C++

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM