搜尋
首頁Javajava教程java int是什麼

java int是什麼

May 30, 2019 am 09:20 AM

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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
poi-tl繪製雙Y軸折線圖時,為何出現折線數量翻倍?poi-tl繪製雙Y軸折線圖時,為何出現折線數量翻倍?Apr 19, 2025 pm 06:33 PM

poi-tl繪製雙Y軸折線圖時折線數量翻倍的排查在使用poi-tl庫繪製包含兩個Y軸的折線圖時,遇到一個奇怪的問題:�...

在Spring Cloud Alibaba中如何將業務模塊的Entity、Mapper、Service集中到Common模塊?在Spring Cloud Alibaba中如何將業務模塊的Entity、Mapper、Service集中到Common模塊?Apr 19, 2025 pm 06:30 PM

在SpringCloudAlibaba中如何將業務模塊的Entity、Mapper、Service集中到Common模塊?在使用SpringCloud...

Go語言如何實現國密SM4和SM2算法的加解密以及互聯互通?Go語言如何實現國密SM4和SM2算法的加解密以及互聯互通?Apr 19, 2025 pm 06:27 PM

Go語言實現國密SM4和SM2加解密本文將詳細介紹如何使用Go語言實現國密SM4和SM2算法的加解密流程,以滿足與Java應�...

在Python項目中是否需要進行分層?在Python項目中是否需要進行分層?Apr 19, 2025 pm 06:24 PM

在Python項目中是否需要分層?最近我在學習Python時,注意到Django開源項目中,很多都在views函數里編寫了大量的�...

如何使用MapStruct簡化系統對接中的字段映射問題?如何使用MapStruct簡化系統對接中的字段映射問題?Apr 19, 2025 pm 06:21 PM

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

IntelliJ IDEA是如何通過JavaAgent和RMI技術識別Spring Boot項目的端口號的?IntelliJ IDEA是如何通過JavaAgent和RMI技術識別Spring Boot項目的端口號的?Apr 19, 2025 pm 06:18 PM

IntelliJIDEA如何識別SpringBoot項目的端口號?在使用IntelliJIDEAUltimate版本啟動Spring...

高效編程:如何才能找到可靠的代碼工具和資源?高效編程:如何才能找到可靠的代碼工具和資源?Apr 19, 2025 pm 06:15 PM

高效編程:尋找可靠的代碼工具和資源很多程序員都渴望找到便捷的代碼工具網站,以提高效率,避免在海量信...

JWT能否實現動態權限變更?與Session機制有何區別?JWT能否實現動態權限變更?與Session機制有何區別?Apr 19, 2025 pm 06:12 PM

關於JWT和Session的困惑與解答許多初學者在學習JWT和Session時,常常會對其本質和適用場景感到困惑。本文將圍繞J...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

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

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境