Java中Math.abs(Integer.MIN_VALUE)的值是其本身!
如下面的程式碼:
public class Test
{
private static final int N = 3;
public static void main(String[] args)
{
for(int i=Integer.MIN_VALUE; i<Integer.MIN_VALUE+5; i++)
System.out.println(Math.abs(i)%N);
}
}
輸出結果為:
-2
1
0
2
1
我們知道,對一個正整數進行取餘操作,其結果是一個非負整數。而對一個負整數進行絕對值運算,其結果是一個正整數。那這裡為什麼會出現出現一個負數呢?
如下面的程式碼:
public class Test
{
public static void main(String[] args)
{
for(int i=Integer.MIN_VALUE; i<Integer.MIN_VALUE+5; i++)
System.out.println(Math.abs(i));
}
}
輸出結果為:
-2147483648
2147483647
2147483646
2147483645
2147483644
也就是說,Math.abs(Integer.MIN_VALUE)的值還是其本身。通過查閱Java的API文件,我們看到對abs(int a)運算,“如果引數等於 Integer.MIN_VALUE
的值(即能夠表示的最小負 int
值),那麼結果與該值相同且為負。”所以會有這樣的結果。
這樣也就出現了一個問題,即上面的取餘操作不是很合適的。下面的程式碼展示了一個真正的取餘運算。
public class Test
{
private static final int N = 3;
public static void main(String[] args)
{
int result = 0;
for(int i=Integer.MIN_VALUE; i<Integer.MIN_VALUE+5; i++)
{
result = Math.abs(i) % N;
System.out.println(result < 0 ? (result + N) : result);
}
}
}
輸出結果為:
1
1
0
2
1
相關文章
- JavaScript Math.abs()JavaScript
- Java安全——語言本身的設計Java
- 門戶軟體的價值不在門戶本身
- php 迴圈陣列引用傳值改變陣列本身的值PHP陣列
- 創業的核心競爭力其實在於創始人本身創業
- Java中讀取配置檔案中的內容,並將其賦值給靜態變數的方法Java賦值變數
- Java入門:深度理解JAVA本身的構造器(轉)Java
- Java 是傳值還是傳引用 (轉)Java
- 用java呼叫.net的wcf其實還是很簡單的Java
- Linux UID是什麼?其數值範圍有哪些?LinuxUI
- java中傳值方式的個人理解Java
- Java - 是值傳遞還是引用傳遞Java
- Python中/與//的區別是什麼?其如何使用?Python
- js如何判斷屬性是本身具有還是繼承別人的JS繼承
- 傳小米估值跌到40億 分析師:其實是魅族
- Java 中賦值類時候修改後原類中的值改變Java賦值
- Linux中Kdump是什麼?其作用有哪些?Linux
- 偽命題:Java傳遞的值還是引用?Java
- python OpenCV中的閾值是什麼PythonOpenCV
- 解惑4:java是值傳遞還是引用傳遞Java
- Java引數傳遞是傳值還是傳引用?Java
- 自己對Java中if變數賦值的理解Java變數賦值
- Java中的值傳遞和引用傳遞Java
- not in 中包含null值是個悲劇Null
- Linux中inode值是什麼?Linux
- vue 中this.$emit()的返回值是什麼?VueMIT
- React Ref 其實是這樣的React
- 中獲取當前程式本身所在目錄
- 根據選擇的物料顯示其特性值
- java 中/**是什麼Java
- Python中find函式是什麼?其作用有哪些?Python函式
- 面試題((A)null).fun()——java中null值的強轉面試題NullJava
- Java中無參帶返回值方法的使用Java
- JAVA獲取json中的全部鍵值對JavaJSON
- DDD中實體與值物件是幹什麼的物件
- C++中“非常量引用的初始值必須是左值”的處理方法C++
- ant如何替換JAVA程式碼中的String變數中的值?Java變數
- 例項原始碼1:利用Java呼叫可執行命令並取得其返回值原始碼Java