if(a == (1,2)) 和 if(a == 1,2) 有什么区别?
What is the difference between if(a == (1,2)) and if(a == 1,2)?
if(a == (1,2))
和 if(a == 1,2)
有什么区别?
#include<stdio.h>
int main()
{
int a = 2;
if(a == (1,2))
printf("Hello");
if(a == 1,2)
printf("World");
return 0;
}
在 if 语句的两个条件中都使用了逗号运算符
第二个条件等价地可以改写成
if( ( a == 1 ), 2)
逗号运算符的值是第二个操作数的值。所以第二个 if 语句中的条件将始终计算为真,因为 2 不等于 0.
第一个if语句中的条件可以改写成
if(a == 2)
因为逗号运算符的第一个表达式(整型常量 1)没有作用。
因此只有当 a 等于 2 时,if 语句的条件才为真。
由于 operator precedence,a == 1,2
等同于 (a == 1),2
并且由于 the comma operator 的工作原理,(a == 1),2
将导致 2
。 a == (1,2)
将与 a == 2
相同。
所以实际上你的两个条件就像
if (a == 2)
printf("Hello");
if(2)
printf("World");
只有当 a
等于 2
时,第一个条件才成立。第二个条件总是为真(只有零为假)。
if(a == (1,2))
和 if(a == 1,2)
有什么区别?
#include<stdio.h>
int main()
{
int a = 2;
if(a == (1,2))
printf("Hello");
if(a == 1,2)
printf("World");
return 0;
}
在 if 语句的两个条件中都使用了逗号运算符
第二个条件等价地可以改写成
if( ( a == 1 ), 2)
逗号运算符的值是第二个操作数的值。所以第二个 if 语句中的条件将始终计算为真,因为 2 不等于 0.
第一个if语句中的条件可以改写成
if(a == 2)
因为逗号运算符的第一个表达式(整型常量 1)没有作用。
因此只有当 a 等于 2 时,if 语句的条件才为真。
a == 1,2
等同于 (a == 1),2
并且由于 the comma operator 的工作原理,(a == 1),2
将导致 2
。 a == (1,2)
将与 a == 2
相同。
所以实际上你的两个条件就像
if (a == 2)
printf("Hello");
if(2)
printf("World");
只有当 a
等于 2
时,第一个条件才成立。第二个条件总是为真(只有零为假)。