【发布时间】:2011-12-13 18:29:14
【问题描述】:
有没有一个Java函数可以将正整数转换为负整数,将负整数转换为正整数?
我正在寻找一个reverse 函数来执行此转换:
-5 -> 5
5 -> -5
【问题讨论】:
-
int x = 5; x = -x;
有没有一个Java函数可以将正整数转换为负整数,将负整数转换为正整数?
我正在寻找一个reverse 函数来执行此转换:
-5 -> 5
5 -> -5
【问题讨论】:
在 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
【讨论】:
最简单的做法是0-值
例如如果 int i = 5;
0-i 会给你-5
如果我是-6;
0- 我会给你 6
【讨论】:
* (-1),而不是使用`0 -`。谢谢
我们可以使用这个来反转 Java 数字 int 或 double :
int x = 5;
int y = -7;
x = x - (x*2); // reverse to negative
y = y - (y*2); // reverse to positif
反转数字的简单算法:)
【讨论】:
这里是死灵法师。
显然,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);
}
}
这样我们可以确保平庸的程序员不明白发生了什么;)
【讨论】:
你可以使用数学:
int x = Math.abs(-5);
【讨论】:
5 变成-5?
var = Math.abs(var) * -1;
Math.abs() 只是删除每个 - 符号。它不会反转符号。请改用-x 或x * -1。
原始 *= -1;
简单的代码行,原始是您想要的任何 int。
【讨论】:
您可以使用减号运算符或 Math.abs。这些适用于所有负整数,除了 Integer.MIN_VALUE! 如果您执行 0 - MIN_VALUE,则答案仍然是 MIN_VALUE。
【讨论】:
是的,正如Jeffrey Bosboom 已经指出的那样(对不起,杰弗里,我回答时没有注意到您的评论),有这样一个功能:Math.negateExact。
和
不,您可能不应该使用它。除非你需要method reference。
【讨论】:
这样的函数不存在或无法编写。
问题是边缘情况 Integer.MIN_VALUE (-2,147,483,648 = 0x80000000) 应用上述三种方法中的每一种,您会得到相同的值。这是由于整数的表示形式和最大可能的整数 Integer.MAX_VALUE (-2,147,483,647 = 0x7fffffff) 比 -Integer.MIN_VALUE 应该少一倍。
【讨论】:
ArithmeticException,而不是默默地返回错误结果。跨度>
只需使用一元减号运算符:
int x = 5;
...
x = -x; // Here's the mystery library function - the single character "-"
Java 有 两个 减去 operators:
0 - x),以及这会按预期编译和工作。
【讨论】:
另一种方法(2的补码):
public int reverse(int x){
x~=x;
x++;
return x;
}
它首先进行一个补码(通过对所有位进行补码),然后将 1 加到 x。这种方法也能胜任。
注意:此方法是用 Java 编写的,与许多其他语言类似
【讨论】:
x = -x。从汇编的角度来看,-x 是一个简单的neg 指令,而~x 和++x 需要一个not 和add 指令。
x = -x;
这可能是我在任何地方见过的最琐碎的问题。
...以及为什么将这个微不足道的函数称为“reverse()”是另一个谜。
【讨论】:
x *= -1 会。当我发现这就是我遇到这个页面的方式时有点惊讶:) 当然你可以转换,但我是自动生成代码,其中 x 可以是字节、短、整数或长......
x *= -1; 呢?你真的想要一个库函数吗?
【讨论】: