一、Math類中的abs()
public static int abs(int a) public static long abs(long a) public static float abs(float a) public static double abs(double a)
Java中的Math類提供了abs()方法來獲取一個數的絕對值。該函數有四個重載版本,分別支持int、long、float和double類型的參數。
對於int和long類型的參數,返回值是整數類型;對於float和double類型的參數,返回值是浮點數類型。下面是幾個使用Math.abs()函數的示例:
int a = -5; long b = -10L; float c = 3.14f; double d = -2.71828; int absA = Math.abs(a); long absB = Math.abs(b); float absC = Math.abs(c); double absD = Math.abs(d);
在上面的代碼中,absA的值為5,absB的值為10,absC的值為3.14,absD的值為2.71828。
二、取模運算符實現絕對值
我們可以使用取模運算符實現絕對值函數,當然這種方法只適用於整數類型。具體做法是:如果輸入的數是負數,就把它乘以-1,否則直接返回原數。下面是實現示例:
public static int abs(int a) { if (a < 0) { return -a; } return a; }
我們可以對這段代碼進行優化,來消除if語句:
public static int abs(int a) { int mask = a >> 31; return (a + mask) ^ mask; }
三、Bitwise Tricks實現絕對值
使用位運算來實現絕對值函數,可以獲得更高的效率。Bitwise Tricks的實現方式如下:
public static int abs(int a) { int mask = a >> 31; return (a ^ mask) - mask; }
利用位運算實現絕對值函數比上一種方法快得多,因此被認為是最優解。由於實現方法過於繁瑣,不建議在正式代碼中使用。
四、Guava庫中的Math函數
Google的開源Java庫Guava也提供了絕對值函數的實現,該函數被定義在com.google.common.math.DoubleMath類中,其函數名為abs()。
double abs(double x)
與Java的Math.abs()函數不同,Guava的abs()函數只有一種重載版本,且只支持double類型的參數。下面是使用Guava的abs()函數的示例:
double x = -3.14159; double absX = DoubleMath.abs(x);
五、BigInteger類中的abs()
Java中的BigInteger類也提供了一個abs()方法用於獲取一個大整數的絕對值。
BigInteger abs()
該函數返回一個新的BigInteger類型對象,其值是輸入參數的絕對值。下面是實例代碼:
BigInteger a = new BigInteger("-123456789"); BigInteger absA = a.abs();
六、總結
本篇文章主要介紹了Java中取絕對值函數的幾種實現方式,其中Java的Math類提供了最基礎的實現方式。Bitwise Tricks是實現絕對值函數的最優解,但是使用過於繁瑣。Guava庫以及Java的BigInteger類也提供了對絕對值函數的支持。
原創文章,作者:SAHYI,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/351751.html