面試錦集:JAVA中存在i+1小於i的情況嗎?

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的情況。

 

以上代碼僅供參考,如有不當之處,歡迎指出!!!

更多幹貨,歡迎大家關注和聯繫我。期待和大家一起更好的交流、探討技術!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章