java之Integer知識整理

2021-07-02 22:40:09 字數 1067 閱讀 2667

最近本人在看jdk源**的時候很有感觸,感嘆**是如此的精煉。就好比說這個最容易被忽視的integer。integer是對int 型別的封裝,這點大家都知道。今天我嘗試來分析其部分本人認為比較有意思的源**。

public static int highestonebit(int i)

**解析:因為int型別是4個位元組,也就是32位。當我們完成以上操作的時候,就能夠保證最高位1後的低位數值全都位1。然後用i-(i>>>1)。這樣就得到值了。注意這裡一定要i>>>1。因為i有可能為負數。

這裡先說一下思路,假設這個二進位制值是00111***xx。這個******代表的是0或者沒有。大多數人都知道負數的二進位製碼也就是補碼是反碼+1。補碼&反碼的值肯定為0。那和反碼加1呢。這裡分為兩種情況。如果***x沒有占用位數。也就是001111是最後的幾位。那得到的是1。如果說***xx占用位數,那反碼後得到的值也全都是1。然後加1。

所以**非常簡單。

public static int lowestonebit(int i)

**解析:1  如果i為負數,則返回值為0。

2 如果是正數。總體的思路就是逐步的判斷最高位1的位置。採用類似二分法。所採用的二分點在最高位1所可能在的區域。按照流程走一遍。

1 先把這個數值向右移動16位,如果說等於0。說明最高位1位於低16位數值。然後把這個值往左移動16位。

如果說大於0。說明這個最高位1位於高16位中的某一位。

按照這樣的思路,我們就是在可能的區域中,然後取中間那個數,往右移動作比較。(對不起描述的不是很好)

這裡要注意一點就是n初始值是為1的。就是假設經過以上步驟後,i>>>31得到的也為0。所以最終的值為:n-(i>>>31)

這裡得到的數值是最高位1前面0的個數。

然後你32減所得到的值就是了。

實現**如下:

public static int rounduptopoweroftwo(int i)

減1的目的是防止i就是乙個符合條件的數值。比如說8.分析的方法,跟前面乙個樣。

知識點記錄之Integer

三 兩個都是new出來的,都為false。源 public static integer valueof int i integer是引用型別,int是原生資料型別。2 對integer物件,jvm會自動快取 128 127範圍內的值,所以所有在這個範圍內的值相等的 integer物件都會共用一塊記...

Java之Integer與int比較

先看 integer a new integer 1 integer a2 new integer 1 integer c 1 integer c2 1 int d 1 integer e 128 integer e1 128 system.out.println a a2 false system...

java基礎之Integer類總結

integer類基本型別int的封裝類,是不可變類。該類提供了很多與int相互轉換的方法。int型別32位,因此它有最小值 2 31 2147483648 和最大值 2 31 1 2147483647 在integer類中有個內部類快取類 integer型別將8位的整數 128 127 看作是常用數...