使用 XOR 和加法取反 int
Negate int using XOR and addition
我必须编写一个将 int 值转换为相同的负 int 值的方法。例如,如果用户输入 5,该方法应该返回 -5。
整个故事是:
该方法有一个传输参数,它可以是正整数或负整数。是不是正int,我们要把它改成负int。如果它是负整数,什么也不做。
也很难检查给定的整数是正数还是负数。
规定:
- 我只能使用算术运算
+
和所有的布尔运算。但在这种情况下,我知道我必须使用 XOR。
- 这与编写方法和所有 JAVA 内容无关。这就是我挣扎的逻辑。
如何仅使用 XOR 和 +
将值更改为其负值?
注意:
唯一允许的操作是:
!
^
&&
||
+
没有*,没有-,没有~
编辑:
CherryDT 和 MikeC 的两个解决方案运行良好。有什么想法可以用相同的规定检查它是负参数还是正参数?我认为这将是简单的部分。后来发现不是。
开始了
public class Test {
public static void main(String []args){
int x = 245;
System.out.println(x);
x = (~x^x)*x;
System.out.println(x);
}
}
(x ^ -1) + 1
说明:基本上和~x + 1
一样。 -1
设置了所有位,因此在异或时反转所有位,就像 NOT 一样。因为,反过来,反转总是给你 -x - 1
,你需要做的就是反转并加 1。
我必须编写一个将 int 值转换为相同的负 int 值的方法。例如,如果用户输入 5,该方法应该返回 -5。
整个故事是: 该方法有一个传输参数,它可以是正整数或负整数。是不是正int,我们要把它改成负int。如果它是负整数,什么也不做。 也很难检查给定的整数是正数还是负数。
规定:
- 我只能使用算术运算
+
和所有的布尔运算。但在这种情况下,我知道我必须使用 XOR。 - 这与编写方法和所有 JAVA 内容无关。这就是我挣扎的逻辑。
如何仅使用 XOR 和 +
将值更改为其负值?
注意: 唯一允许的操作是:
!
^
&&
||
+
没有*,没有-,没有~
编辑: CherryDT 和 MikeC 的两个解决方案运行良好。有什么想法可以用相同的规定检查它是负参数还是正参数?我认为这将是简单的部分。后来发现不是。
开始了
public class Test {
public static void main(String []args){
int x = 245;
System.out.println(x);
x = (~x^x)*x;
System.out.println(x);
}
}
(x ^ -1) + 1
说明:基本上和~x + 1
一样。 -1
设置了所有位,因此在异或时反转所有位,就像 NOT 一样。因为,反过来,反转总是给你 -x - 1
,你需要做的就是反转并加 1。