为什么最后打印 1?

  • 本文关键字:打印 最后 c
  • 更新时间 :
  • 英文 :


我不明白为什么它在最后打印 1。

#include <stdio.h>
int main(){
printf("%dn", -2&&2);
return 0;
}

&&是一个布尔运算符,而不是整数运算符。 在 C 中,任何非零值在应用于布尔运算时都会被解释为true,而零是应用于布尔运算时被视为false的唯一整数值。

所以:

(<non-zero> && <non-zero>) == true

相反,当true结果被视为整数时(在这种情况下,%d格式说明符指示(,true用 1 表示,而false为零。 所以在这种情况下,true变成 1。

如果要打印布尔结果,则:

printf( "%sn", (-2 && 2) == 0 ? "false" : "true" ) ;

严格表达式:

-2 && 2

相当于:

(-2 != 0) && (2 != 0)

它具有严格的类型一致性,因为!=具有整数操作数的布尔结果,因此&&仅使用布尔操作数呈现,没有隐式转换。

>因为-2&&2的计算结果是true= 1(当你和两个数字在一起时,除非其中一个或两个数字都是0,否则你会得到true(。 尝试将-2&&2更改为true && false;它将打印 0。

表达式-2&&2恢复为1true(true总是!= 0,而false == 0(基于布尔算术运算。

以下是它如何恢复1

&&表示逻辑AND,而不是按位AND,后者在C中&。所以你正在逻辑地和-22的值.

让我们将以下句子视为逻辑 AND (&&( 操作的语句之一:

如果两个操作数都不为零,则条件变为 true。

-2不为零,等于1

2也是非零的,等于1

所以结果也是1(11=1(或true表示1

&&运算符用于逻辑和,而不是按位和

程序中的表达式计算结果为

printf("%dn", (-2 != 0) && (2 != 0));

这很1,因为在 C 中,布尔表达式的值0for false,1true 的值。

相反,如果您编写了-2 & 2,则程序将具有实现定义的行为,具体取决于用于目标系统的负整数的表示形式。在具有 2 补码表示的现代系统上,此按位和表达式的计算结果为2。符号量级表示的值相同,但在具有补码表示的稀有系统上,该值将是0

最新更新