检查4个数字是否相等的最短方法?

时间:2015-12-28 12:29:35

标签: c

我有4个数字(int a,int b,int c,int d)等于rand()%7。如何以最短的方式发现数字是否相等?

2 个答案:

答案 0 :(得分:1)

您可以通过一次测试来完成此任务:

int x = (1 << a) | (1 << b) | (1<< c) | (1<< d);
if ((x & (x >> 1)) == 0)
     printf("a, b, c and d are identical\n");

它起作用,因为所有值都很小,小于int中的位数。该测试检查x是否为2的幂,只有当a,b,c和d的所有值相同时才会为真。

chux提出了一个更短的解决方案:

if ((1 << a) == ((1 << b) | (1 << c) | (1 << d)))
    printf("identical\n");

它可能不会比指令数量中的简单(a == b && b == c && c == d)短,也不会短于计算时间,具体取决于您的平台,编译器,选项的具体情况......

这是一个更简单的一个,只使用一个测试,适用于更大范围的值,例如所有正int值:

if (((a - b) | (b - c) | (c - d)) == 0)
    printf("identical\n");

答案 1 :(得分:0)

要查明这些数字是否相等,您可以这样做:

if (a == b && b == c && c == d)

上述条件得到了数学中平等的传递性质的支持,其中它表明:

  

如果a = b且b = c,则a = c。

鉴于该财产,我们可以说:

  

如果a = b,b = c,c = d,则a = c,a = d,b = d。

来源:Mathwords