java int是什麼
在Java中,int是使用32位元表示,long使用64位元表示。這兩個基本型別都是整形,沒有其他的表示方法了。他們內部是怎麼表示的呢?是採用補碼表示。由於我們常在做題中會遇到Java的位元運算,Java的位元運算只能用於int和long型。所以我們有理由好好分析Java內部是怎麼用二進位表示的。這裡只舉int為例子,long是一樣的。
1、int的範圍
int在Java內部是用32位元來表示的,而最高位元是表示符號,因此真正可以表示數字的是31位元. Java的int型別取值範圍是-2^31~2^31-1.
為什麼範圍是這樣?這就牽涉到二進制的存儲方法了。
在Java中,是使用補碼來儲存int。對於一個正數,其補碼,就是本身。例如,我們舉4個位元來做例子。對於正數1-7,分別是0001,0010,。 。 。 ,0111,總共是7個數字,也就是2^3-1個。
對於0,可以看到問題來了。可以是-0,也可以是 0,都是0。決定怎麼表示0呢?補碼的法則規定,0認為是 0,因此0用0000表示。
這個時候,需要表示負數了。我們認為,一個負數,它的補碼表示是其絕對值取反(連同符號位元一起取反)再加1。例如,對於-5,它的絕對值為5,表示為0101,取反,為1010,加一為1011,這就是-5的補碼表示。
這時候,可以用1000來表示-8,於是負數的範圍是-2^31,這也解釋了int的值範圍。對於64位元的long也是完全一樣的。
2、Java的位元運算
Java的位元運算是怎麼做的呢?要記住,移位運算是整個數整體向左或右移動。如果是向左移,則是低位補0。如果是向右移,分成兩種情況。如果是0和正數,則高位補0。如果是負數,則高位補1。如對於-5為1011,右移一位為1101,也就是-3。
還有一種位元運算。如果是位元運算,記得符號位也是要參與的!
3、右移與除法的關係
對於正數(當然0也是)來說,右移一位等於除以2的結果,但對於負數來說不是(確切地說是除以2的結果-1)!例如,-5/2結果是-2,-5>>1結果是-3。
4、正負號與整數除法、取餘運算的關係
正數/正數,向下取整數
負數/負數,等於他們的絕對值相除
正數/負數和負數/正數,就是他們絕對值相除乘以負號。
至於%的結果,結果的絕對值與他們絕對值的取餘一樣,但是符號由第一個數決定。
5、為什麼要用補碼?
(1)前面已經說過,為了合理地表示0和-0;
(2)可以在負數處多表示一個最負的數;
(3)使用補碼,可以將符號位元和其它位元統一處理;同時,減法也可依加法來處理。另外,兩個用補碼表示的數相加時,如果最高位(符號位)有進位,則進位被捨棄。
其實很大一個原因是為了計算加減法方便。在使用補碼系統運算的時候,是可以把符號位元加起來一起運算的。在位元運算中,如果符號位有進位,是可以捨棄的,因為已經超出了位元範圍了。對於正數和正數相加,沒什麼特別的。下面例子都是8個位元的。例如,對於7 7,也就是00000111 00000111,結果是00001110,為14。
而對於減法,例如9-4,我們就認為是9 (-4),先對4,也就是00000100取反再加一,得到-4的補碼表示11111100,然後相加,也就是
00001001(9)
11111100(-4)
? 100000101
最後一位符號位元的進位1,因為已經超出了比特範圍,所以直接捨棄,可以直接就得到5了。所以這也就是實現了減法變加法。
以上是java int是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

在使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名以構建查詢條件,是一個常見的難題。本文將針...
