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