用于查找小于c的按位运算符

jwl*_*wl4 8 c bitwise-operators

这是一个家庭作业,要求我提出一个函数来确定x < y,如果我必须返回1,只使用按位运算符( ! ~ & ^ | + << >> ).我只允许使用常量0 - 0xFF,并假设一个32位整数.没有循环,铸造等

我已经想到的是,如果你只检查说4位,你可以做x - y以确定是否x小于y.如果x8y9其结果将是1111-1.

int lessThan(int x, int y){
    int sub = x + (~y+1); 
Run Code Online (Sandbox Code Playgroud)

我感到困惑的是如何比较这个结果,x以确定它确实小于y.

这里一直在研究这篇文章.

但我对这个问题的方法感到有点困惑.我已经解决了转移以获得有点污点,但我对如何使用该结果来比较小于或大于的值感到困惑.我只是在寻找一些指导和清晰度,而不是解决方案,这不是我的意图.

One*_*rew 0

这是我的尝试(编译结果,x > y 然后 0,x < y 然后 1,x == y 然后 1):

((((x + ~y) >> 31) + 1))^1
Run Code Online (Sandbox Code Playgroud)

  • 我认为你需要先加1。两个补码中的“-y = ~y+1” (2认同)