C 需要帮助理解这个逻辑表达式!!我+!J

C 需要帮助理解这个逻辑表达式!!我+!J,c,C,可能重复: 据我所知,这个!!将表达式转换为布尔值,也就是说,因为i不等于2,所以值为0+j,不等于1,所以值为0,因为0等于false,所以它读取:false+false=true,表示1的值。请帮助我,我是C编程新手。C没有布尔类型,C99和更新版本都有,但您的程序中没有使用它的 !!是一个一元运算符,它将0转换为1,将其他任何内容转换为0。对你来说,既然我2岁!我是0,而且!!我1岁。j是1,所以!j是0。那就走了!!我+!j等于1+0,你打印的是1。请尝试此示例程序,以查看其运行情况:

可能重复:


据我所知,这个!!将表达式转换为布尔值,也就是说,因为i不等于2,所以值为0+j,不等于1,所以值为0,因为0等于false,所以它读取:false+false=true,表示1的值。请帮助我,我是C编程新手。

C没有布尔类型,C99和更新版本都有,但您的程序中没有使用它的

!!是一个一元运算符,它将0转换为1,将其他任何内容转换为0。对你来说,既然我2岁!我是0,而且!!我1岁。j是1,所以!j是0。那就走了!!我+!j等于1+0,你打印的是1。请尝试此示例程序,以查看其运行情况:

#include <stdio.h>

int main(void)
{
    int i = 2, j = 1;

    printf("i = %d, j = %d\n", i, j);
    printf("!i = %d, !!i = %d\n", !i, !!i);
    printf("!j = %d\n", !j);
    printf("!!i + !j = %d + %d = %d\n", !!i, !j, !!i + !j);
    return 0;
}

C没有一个布尔类型,C99和更新版本都有,但是在你的程序中没有使用它的东西

!!是一个一元运算符,它将0转换为1,将其他任何内容转换为0。对你来说,既然我2岁!我是0,而且!!我1岁。j是1,所以!j是0。那就走了!!我+!j等于1+0,你打印的是1。请尝试此示例程序,以查看其运行情况:

#include <stdio.h>

int main(void)
{
    int i = 2, j = 1;

    printf("i = %d, j = %d\n", i, j);
    printf("!i = %d, !!i = %d\n", !i, !!i);
    printf("!j = %d\n", !j);
    printf("!!i + !j = %d + %d = %d\n", !!i, !j, !!i + !j);
    return 0;
}
!!如果x为真,即不等于0,则x为0;如果x为假,即等于0,则x为1。因为你的例子我是2!我将是0,因此!!我一岁了。同样地j将是0。所以表达式的结果将是1+0=1

请注意,在任何情况下,0+0即false+false都不等于1。

!如果x为真,即不等于0,则x为0;如果x为假,即等于0,则x为1。因为你的例子我是2!我将是0,因此!!我一岁了。同样地j将是0。所以表达式的结果将是1+0=1


请注意,在任何情况下,0+0即false+false都不等于1。

以下是规范中关于!操作员C99§6.5.3.3/5。最后一句简短的话是理解其行为所需要的全部:

逻辑求反运算符的结果!如果其操作数的值比较,则为0 不等于0,如果其操作数的值比较等于0,则为1

结果的类型为int

表情!E等于0==E

我们可以使用第三句的转换来评估您的表达式!!我+!J转变为:

(0 == (0 == i)) + (0 == j)
我们可以对其进行如下评估:

(0 == (0 == 2)) + (0 == 1) // substitute the variable values
(0 == (0     )) + (0 == 1) // 0 == 2 is false, so it becomes 0
(0 == (0     )) + (0     ) // 0 == 1 is false, so it becomes 0
(1            ) + (0)      // 0 == 0 is true, so it becomes 1
 1                         // 1 + 0 is 1

以下是规格说明中关于的说明!操作员C99§6.5.3.3/5。最后一句简短的话是理解其行为所需要的全部:

逻辑求反运算符的结果!如果其操作数的值比较,则为0 不等于0,如果其操作数的值比较等于0,则为1

结果的类型为int

表情!E等于0==E

我们可以使用第三句的转换来评估您的表达式!!我+!J转变为:

(0 == (0 == i)) + (0 == j)
我们可以对其进行如下评估:

(0 == (0 == 2)) + (0 == 1) // substitute the variable values
(0 == (0     )) + (0 == 1) // 0 == 2 is false, so it becomes 0
(0 == (0     )) + (0     ) // 0 == 1 is false, so it becomes 0
(1            ) + (0)      // 0 == 0 is true, so it becomes 1
 1                         // 1 + 0 is 1