是否有Java函数将正int转换为负数而负数int转换为正数?
我正在寻找reverse
函数来执行此转换:
-5 -> 5
5 -> -5
答案 0 :(得分:191)
x *= -1;
怎么样?你真的想要一个库函数吗?
答案 1 :(得分:70)
x = -x;
这可能是我见过的最微不足道的问题。
...以及你为什么称这个琐碎的函数'reverse()'是另一个谜。
答案 2 :(得分:43)
只需使用一元减号运算符:
int x = 5;
...
x = -x; // Here's the mystery library function - the single character "-"
Java有两个减去operators:
0 - x
)和这会按预期编译并运行。
答案 3 :(得分:9)
另一种方法(2的补码):
public int reverse(int x){
x~=x;
x++;
return x;
}
它首先执行一个补码(通过补充所有位)然后将x加1。这种方法也可以完成这项工作。
注意:此方法是用Java编写的,与许多其他语言类似
答案 4 :(得分:6)
原始* = -1;
简单的代码行,original是你想要的任何int。
答案 5 :(得分:5)
不存在或无法编写此类功能。
问题是边缘情况Integer.MIN_VALUE(-2,147,483,648 = 0x80000000)应用上述三种方法中的每一种,并获得相同的值。这是由于整数的表示和最大可能的整数Integer.MAX_VALUE(-2,147,483,647 = 0x7fffffff),它比-Integer.MIN_VALUE应该少一个。
答案 6 :(得分:3)
在这里犯罪。
显然,x *= -1;
太简单了
相反,我们可以使用一个简单的二进制补码:
number = ~(number - 1) ;
像这样:
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
int iPositive = 15;
int iNegative = ( ~(iPositive - 1) ) ; // Use extra brackets when using as C preprocessor directive ! ! !...
System.out.println(iNegative);
iPositive = ~(iNegative - 1) ;
System.out.println(iPositive);
iNegative = 0;
iPositive = ~(iNegative - 1);
System.out.println(iPositive);
}
}
通过这种方式,我们可以确保平庸的程序员不了解正在发生的事情;)
答案 7 :(得分:1)
是的,正如Jeffrey Bosboom已经注意到的那样(对不起杰弗里,当我回答时,我没有注意到你的评论),有这样一个功能:Math.negateExact。
和
不,你可能不应该使用它。除非您需要method reference。
答案 8 :(得分:1)
您可以使用减号运算符或Math.abs。这些适用于Integer.MIN_VALUE的所有负整数EXCEPT! 如果你做0 - MIN_VALUE,答案仍然是MIN_VALUE。
答案 9 :(得分:0)
我们可以使用以下方法反转Java数字int或double:
int x = 5;
int y = -7;
x = x - (x*2); // reverse to negative
y = y - (y*2); // reverse to positif
简单的算法来反转数字:)
答案 10 :(得分:0)
最简单的方法是0-值
例如,如果int i = 5;
0-i给你-5
如果我是-6,
0-我会给你6
答案 11 :(得分:0)
在kotlin中,您可以使用unaryPlus和unaryMinus
input = input.unaryPlus()
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/unary-plus.html https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/unary-minus.html
答案 12 :(得分:-1)
您可以使用数学:
int x = Math.abs(-5);