java.lang.Integer.MAX_VALUE;這是什么意思?


這個是Integer類中的一個int類型的常量MAX_VALUE
它代表int所能表示的最大值 0x7FFFFFFF

相對應的是Integer類中的另一個常量MIN_VALUE
它代表int所能表示的最小值 0x80000000

 

整型的其他的子型也可以 byte short long?

基本類型之間不存在子型和父型,只是范圍不同,
小范圍轉換為大范圍可以直接轉換
大范圍轉換小范圍需要強制轉換符號,
例如:
long lv=123456;
int v=(int) lv;

數字基本類型都有對應的類及最大最小值常量
Byte.MAX_VALUE =0x7F
Byte.MIN_VALUE =0x80

Short.MAX_VALUE =0x7FFF
Short.MIN_VALUE =0x8000

Integer.MAX_VALUE =0x7FFFFFFF
Integer.MIN_VALUE =0x80000000

Long.MAX_VALUE =0x7FFFFFFFFFFFFFFF
Long.MIN_VALUE =0x80000000000000000

java源代碼:
Integer.MAX_VALUE經常會在集合中用到,對這個概念一直沒有深究過,查看一下源碼。

一個常數,持有了int類型數最小值,-2^31次方,-2147483648。負21億多。

/**

* A constant holding the minimum value an {@code int} can

* have, -2<sup>31</sup>.

*/

@Native public static final int MIN_VALUE = 0x80000000;

 

一個常數,持有了int類型數的最大值,2^31次方,2147483648,正21億多

/**

* A constant holding the maximum value an {@code int} can

* have, 2<sup>31</sup>-1.

*/

@Native public static final int MAX_VALUE = 0x7fffffff;

 

解釋:
1、0x80000000
0x表示16進制

80000000一共8位16進制,也就是32位的2進制,2進制寫法位數太多了,不展開寫了,這也是為什么用16進制表示的原因。

1000 后面28個0,前面1表示負數,后面的27個0,這個應該是補碼,那就是-1,會得到27個1,然后再求反碼,27個0,納尼???

因為這個數達到了32位二進制的上限,所以我們不會再去按照-1,再反碼的方式求真正的值,直接按照原碼的負數計算即可。也就是-2^31次方。

 

2、0x7fffffff
展開就是0111后面28個1,也就是一共31個1的整數,2^31 - 1

 

3、MAX_VALUE + 1 == MIN_VALUE
這他媽就好玩了,0111 1111 1111 1111 1111 1111 1111 1111+1 = 1000 0000 0000 0000 0000 0000 0000 0000 沒毛病。

或者這么想,我們把計算機的“模”從中間剖開,負數逆時針,正數順時針,正數從0到6點鍾,包括0不包括6點鍾,負數從0到6點鍾,不包括0,包括6點鍾,MAX_VALUE再往前+1,就是MIN_VALUE




Integer.MIN_VALUE,即-2147483648,二進制位如下:

 
1000 0000 0000 0000 0000 0000 0000 0000

 

在計算機的運算中,“-”(前綴)運算表示各二制位取反再加1,也就是說 b = -a 在計算機內部是 b = ~a + 1 這樣處理的,所以上面的位就變成了:

 

   1000 0000 0000 0000 0000 0000 0000 0000 Integer.MIN_VALUE

取反 0111 1111 1111 1111 1111 1111 1111 1111 (取反之后變成了Integer.MAX_VALUE)

加1 1000 0000 0000 0000 0000 0000 0000 0000 -Integer.MIN_VALUE(與原來的結果一樣)



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM