我的方法需要使用更少的运算符

Gua*_*ler 2 c++ bit-manipulation operators

我正在做一个家庭作业,我需要在最多24个运算符中创建一个按位方法.我的代码有效...但我有25个操作员,一个太多了.有人能发现一种更有效的方法来做一段代码吗?

 int isGreater(int x, int y)
    {
      int xSign = (x>>31);
      int ySign = (y>>31);
      int check1 = (xSign & ySign) | (~xSign & ~ySign);
      int same = !((( x + ((~y) + 1) )>>31) & 0x1);
      int check2 = (check1 & same) | (~check1 & !xSign);
      int equal = ((!(x ^ y))<<31)>>31;
      return 0 | (~equal & check2);
    }
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 6

尝试更改此行:

int check1 = (xSign & ySign) | (~xSign & ~ySign);
Run Code Online (Sandbox Code Playgroud)

为了这:

int check1 = (xSign & ySign) | ~(xSign | ySign);
Run Code Online (Sandbox Code Playgroud)

这是一个较少的运营商.

  • [德摩根定律] +1(http://en.wikipedia.org/wiki/De_Morgan's_laws):) (3认同)