JAVA中存在i+1<i的情況嗎,請代碼實現並詳細說明?
面試中被問到這個問題,小夥伴們是不是很疑惑,此時內心是不是在想WHAT,發生了什麼,這麼多年的數學難道白學了。很顯然在JAVA中是存在的,我們這裏直接上代碼。
package com.algorithm;
import java.util.ArrayList;
import java.util.List;
/**
* 面試錦集:
*
* JAVA中存在i+1<i的情況嗎,請代碼實現並詳細說明
*
* @author 小輝GE/小輝哥
* <p>
* 2019年8月7日 下午12:30:00
*/
public class Bytecode {
public static void main(String[] args) {
boolean flag = false;
// 假設JAVA中存在i+1<i的情況,且並不知道有多少個,這裏先定義一個List
List<Integer> target = new ArrayList<Integer>();
// 遍歷整個INT取值範圍
for (int i = Integer.MIN_VALUE; i <= Integer.MAX_VALUE; i++) {
if ((i + 1) < i) {
flag = true;
target.add(i);
}
// 當遍歷到最大值時候,需要break,考慮到如果存在i+1<i的情況,不做處理,就死循環了
if (i == Integer.MAX_VALUE) {
break;
}
}
if (flag) {
for (int i = 0; i < target.size(); i++) {
System.out.println("存在(i + 1)<i的情況,此時i爲:" + target.get(i) + ",i + 1爲:" + (target.get(i) + 1));
}
} else {
System.out.println("不存在(i + 1)<i的情況");
}
}
}
測試輸出結果如下:
結果分析:
當i爲2147483647出現i+1<i的情況,大家都知道在計算機中所有的數字都是二進制方式表示的。
2147483647用二進制表示0111 1111 1111 1111 1111 1111 1111 1111,
2147483647+1則表示爲 1000 0000 0000 0000 0000 0000 0000 0000
大家可以看出2147483647+1最高位爲1,所以是負數。
因此在計算1000 0000 0000 0000 0000 0000 0000 0000的值時,需要進行取反加1,即爲1000 0000 0000 0000 0000 0000 0000 0000,也就是2的31次方,得出該值爲2147483648,因爲之前二進制碼最高爲是1表示負數,因此最終得出i+1 = -2147483648,所以存在 i+1<i的情況。
以上代碼僅供參考,如有不當之處,歡迎指出!!!
更多幹貨,歡迎大家關注和聯繫我。期待和大家一起更好的交流、探討技術!!!