簡體   English   中英

Java 數學 function 將正整數轉換為負數,將負數轉換為正數?

[英]Java math function to convert positive int to negative and negative to positive?

是否有 Java function 將正整數轉換為負整數,將負整數轉換為正整數?

我正在尋找reverse function 來執行此轉換:

-5  ->  5
 5  -> -5

x *= -1;怎么樣? ? 你真的想要一個圖書館 function 嗎?

 x = -x;

這可能是我在任何地方見過的最瑣碎的問題。

...以及為什么你會稱這個微不足道的 function 'reverse()' 是另一個謎。

只需使用一元減號運算符

 int x = 5;... x = -x; // Here's the mystery library function - the single character "-"

Java 有兩個減號運算符

  • 熟悉的算術版本(例如0 - x ),以及
  • 一元減法運算(在這里使用),它否定(單個)操作數

這可以按預期編譯和工作。

另一種方法(2的補碼):

 public int reverse(int x){ x~=x; x++; return x; }

它首先進行一個補碼(通過對所有位進行補碼),然后將 1 加到 x 上。 這種方法也可以完成這項工作。

注意:這個方法是用Java寫的,會和很多其他語言類似

沒有這樣的 function 存在或可以寫入。

問題是極端情況 Integer.MIN_VALUE (-2,147,483,648 = 0x80000000) 應用上述三種方法中的每一種,您會得到相同的值。 這是由於整數的表示形式和最大可能的 integer Integer.MAX_VALUE (-2,147,483,647 = 0x7fffffff) 應該是 -Integer.MIN_VALUE 的一倍。

是的,正如Jeffrey Bosboom已經指出的那樣(對不起,Jeffrey,我回答時沒有注意到您的評論),有這樣一個 function: Math.negateExact

不,您可能不應該使用它。 除非您需要方法參考,否則不會。

原始 *= -1;

簡單的代碼行,原始是您想要的任何 int。

死靈在這里。
顯然, 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) } }

這樣我們就可以確保平庸的程序員不明白發生了什么;)

最簡單的做法是 0- 值

例如,如果 int i = 5;

0-我會給你-5

如果我是-6;

0-我會給你6

您可以使用減號運算符或 Math.abs。 這些適用於除 Integer.MIN_VALUE 之外的所有負整數。 如果你做 0 - MIN_VALUE 答案仍然是 MIN_VALUE

用於將負數轉換為正數。 只需使用內置的 Math.abs() function。

 int n = -10; n = Math.abs(n);

一切順利

我們可以使用以下方法反轉 Java 數字 int 或 double :

 int x = 5; int y = -7; x = x - (x*2); // reverse to negative y = y - (y*2); // reverse to positif

反轉數字的簡單算法:)

您可以使用數學:

 int x = Math.abs(-5);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM