如何确定三个数字是否相等

use*_*874 4 c bit-manipulation bitwise-operators

使用严格的按位运算,我将如何确定三个数字是否相等。到目前为止,我有下面显示的代码,但不适用于0x80000000,0x7fffffff,0x7fffffff之类的边缘情况。

int isEqualThree(int x, int y, int z) {
    int first = x ^ y;
    int second = first ^ z;
    int third = second ^ x;
    int final = !third;
    return final;
}
Run Code Online (Sandbox Code Playgroud)

Lea*_*ngC 5

尝试这个

int check(int a,int b,int c)
{
    return !((a^b)|(b^c));
}
Run Code Online (Sandbox Code Playgroud)

由于没有限制要使用的运算符的数量,因此!不允许,那么考虑32位数字,也可以是一个解决方案,仅使用按位运算符

int check(int a,int b,int c)
{
  int d;
  d=(a^b)|(b^c); 
  d=~d; 
  return ((d>>31&1)&(d>>30&1)&(d>>29&1)&(d>>28&1)&(d>>27&1)&(d>>26&1)&(d>>25&1)&(d>>24&1)&(d>>23&1)&(d>>22&1)&(d>>21&1)&(d>>20&1)&(d>>19&1)&(d>>18&1)&(d>>17&1)&(d>>16&1)&(d>>15&1)&(d>>14&1)&(d>>13&1)&(d>>12&1)&(d>>11&1)&(d>>10&1)&(d>>9&1)&(d>>8&1)&(d>>7&1)&(d>>6&1)&(d>>5&1)&(d>>4&1)&(d>>3&1)&(d>>2&1)&(d>>1&1)&(d&1));
Run Code Online (Sandbox Code Playgroud)

}