您好,登錄后才能下訂單哦!
這篇文章主要講解了“java虛擬機知識點有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java虛擬機知識點有哪些”吧!
整數在java虛擬機中以補碼的形式保存,
原碼:所謂原碼,就是符號位加上數字的二進制表示,以int
為例,第1位表示符號位(正數或負數),其余31位表示該數字的二進制值。
反碼:所謂反碼,就是符號位不變,其余位取反。
補碼:負數的補碼就是反碼加1,正數的補碼就是原碼本身。
在java中,可以使用位運算查看整數中每一位的實際值,代碼如下:
// 打印 -10 在虛擬機內的實際表示 public static void main(String[] args) { int a = -10; for(int i = 0; i < 32; i++) { int t = (a & 0x8000_0000 >>> i) >>> (31 - i); System.out.print(t); } }
這段程序的基本思想是,進行32次循環,每次循環取出int
值中的一位,第3行的 0x8000_0000
是一個首位為1,其余位為0的整數,通過右移i位,定位到要獲取的第i位,并將除該位外的其他位統一設置為0,而該位不變,最近將該位移至最右,并進行輸出。
使用補碼的好處
可以統一數字0的表示。0既是非正數,又是非負數,使用原碼表示時符號位難以確定,把0歸入正數或者負數得到的原碼是不同的。但是使用補碼表示時,無論把0歸入正數還是負數都會得到相同的結果。
使用補碼可以簡化整數的加減法計算,將減法計算視為加法計算,實現減法和加法的完全統一,實現正數和負數加法的統一。
在java虛擬機中,浮點數有float
和double
兩種,分別是32位和64位浮點數。浮點數在java虛擬機中表示比整數略顯復雜。目前使用最為廣泛的是由 IEEE 754
定義的浮點數格式。
在IEEE 754
的定義中,一個浮點數由3部分組成:符號位、指數位 和 尾數位。以32位float類型為例,符號位占1位,表示正負數,指數位占8位,尾數為點剩余23位。
31位為符號位:0表示正數,1表示負數
31~23位:共8位表示指數位,內存存儲數據從0~2^8-1=255,由于指數可以是正也可以是負,所以指數位采用移位存儲表示數據,8位有符號有可表示數據從-128~127,所以指數位表示的實際指數應該是無符號位數減去127,例如0000 0000表示為0-127=-127,1111 1111表示為255-127=128,1000 0001表示為129-127=2
22~0位:共23位表示尾數位,內存存儲數據從0~2^23-1=8388607
在java中,使用Float.floatToRawIntBits()
函數可以獲得一個單精度浮點數的 IEEE 754
表示,如下:
public static void main(String[] args) { float a = -5; System.out.println(Integer.toBinaryString(Float.floatToIntBits(a))); }
感謝各位的閱讀,以上就是“java虛擬機知識點有哪些”的內容了,經過本文的學習后,相信大家對java虛擬機知識點有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。