如何在C中测试几个变量的等价性

时间:2009-12-22 17:05:26

标签: c

假设我想在if语句中测试不仅仅是一个,而是几个等价变量:

if(x1==x2==y1==y2){
    printf("Input values shouldn't be equal!");
}

但这似乎不起作用。还有什么方法可以做到这一点?

10 个答案:

答案 0 :(得分:26)

if (x1 == x2 && x2 == y1 && y1 == y2) { ... }

表达式a == b的结果将是0或1的整数值。==运算符是左关联的,因此表达式a == b == c将被计算为{{ 1}};也就是说,(a == b) == c(0或1)的结果将与c的值进行比较。所以在下面的代码中

a == b

如果a == b且c == 1或a!= b且c == 0,则表达式仅计算为true。

答案 1 :(得分:10)

if (x1 == x2 && x1 == y1 && x1 == y2)
{
  printf("Input values shouldn't be equal!");
}

答案 2 :(得分:9)

if( x1 == x2 && x2 == y1 && y1 == y2 ) { ... }

答案 3 :(得分:6)

如果它们是整数,则可以使用按位运算:

if ((x1 & x2 & x3 & x4) == (x1 | x2 | x3 | x4))
  // all are equal

它将评估为真正的IFF它们都是相同的

答案 4 :(得分:3)

这是一种不同的方法,使用辅助变量(count_equals),以便您可以轻松完成(并理解)。

int count_equals = 0;
if (x1 == x2) count_equals++;
if (x1 == y1) count_equals++;
if (x1 == y2) count_equals++;
if (x2 == y1) count_equals++;
if (x2 == y2) count_equals++;
if (y1 == y2) count_equals++;

if (count_equals == 0) /* all values are different */;
else if (count_equals == 6) /* all values are equal */;
else /* some values are equal */;

答案 5 :(得分:1)

此处提供的解决方案大多正确且易于理解。

但我更喜欢solution provided by Sany Huttunen

引用:

if (x1 == x2 && x1 == y1 && x1 == y2)
{
  printf("Input values shouldn't be equal!");
}

以下是

的原因

虽然在这个具体案例中似乎不可能,但它立即指导我考虑重构,如:

(a*b) + (a*c) + (a*d)

可以简化为

a*(b+c+d)

如上所述,在这个具体案例中不可能简化,因为

(a*b) + (a*c) + (a*d)

遵循不同的数学规则

(a+b) * (a+c) * (a+d)

如果我没记错的话,这与交换,联想和分配规则有关。

答案 6 :(得分:0)

不起作用,因为(x1 == x2)的计算结果为数字1,如果为真,则假设为0,则为0。 (x1 == x2 == x3)最终评估为((x1 == x2)== x3)。

我认为你需要编写自己的函数才能做到这一点。

答案 7 :(得分:0)

以下C代码应该回答您的问题:

if(x1==x2 && x1 == y1 && x1 == y2 && 
            x2==y1 && x2 == y2 &&
             y1 == y2)
{ printf("Input values shouldn't be equal!"); }
  return 0;
}

答案 8 :(得分:0)

这是另一种使用布尔逻辑的方法

bool all_equal(false)
all_equal = x1 == x2;
all_equal = all_equal && (x2 == x3);
all_equal = all_equal && (x3 == x4);

一个好的编译器可以使用条件汇编指令对此进行编码,而不会中断指令预取队列。

答案 9 :(得分:-1)

您的问题是==运算符的使用不正确。你需要使用类似的东西:

if ((x1 == x2) && (x1 == y1) && (x1 == y2)) {
   printf("Input values shouldn't be equal!"); 
}