使用XOR和加法取消int

时间:2016-04-25 18:16:24

标签: java bit-manipulation xor

我必须编写一个方法,将int值转换为相同的负int值。例如,如果用户输入5,则该方法应该返回-5。

整个故事是: 该方法具有传递参数,该参数是正int或负int。它是一个积极的int,我们应该将它改为负int。如果是负int,则什么也不做。 也很难检查给定的int是正还是负。

规则:

  • 我只允许使用算术运算+和所有布尔运算。但在这种情况下,我知道我必须使用XOR。
  • 这不是关于编写方法和所有JAVA的东西。这只是我挣扎的逻辑。

如何仅使用XOR和+

将值更改为负值

注意: 唯一允许的操作是:

! ^ && || +

没有*,没有 - ,没有〜

编辑: CherryDT和MikeC的两个解决方案运作良好。任何想法如何检查它是否具有相同的规则的负面或正面参数?我认为这将是一件容易的事。然后意识到它不是。

2 个答案:

答案 0 :(得分:2)

(x ^ -1) + 1

说明:基本上,它与~x + 1相同。 -1设置了所有位,因此在与XOR一起时反转所有位,就像NOT一样。而且,反之亦然,反转将始终为您提供-x - 1,您需要做的就是反转并添加1.

答案 1 :(得分:-2)

我们走了

public class Test {

     public static void main(String []args){
        int x = 245;
        System.out.println(x);
        x = (~x^x)*x;
        System.out.println(x);
     }
}