java數據類型是有符號的,那與有些無符號的如何區別


一、首先需要明白數據類型有符號與無符號的概念

最明顯的區別就是二者表示的范圍不同: 無符號數中,所有的位都用於直接表示該值的大小。
有符號數中最高位用於表示正負,所以,當為正值時,該數的最大值就會變小。
我們舉一個字節的數值對比:
無符號數: 1111 1111 值:255 1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20
有符號數: 0111 1111 值:127 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20
同樣是一個字節,無符號數的最大值是255,而有符號數的最大值是127。
原因是有符號數中的最高位被挪去表示符號了。
並且,我們知道,最高位的權值也是最高的(對於1字節數來說是2的7次方=128),所以僅僅少於一位,最大值一下子減半。
不過,有符號數的長處是它可以表示負數。
因此,雖然它的在最大值縮水了,卻在負值的方向出現了伸展。
我們仍一個字節的數值對比:
無符號數: 0 ----------------- 255 有符號數: -128 --------- 0 ---------- 127
同樣是一個字節,無符號的最小值是 0 ,而有符號數的最小值是-128。
所以二者能表達的不同的數值的個數都一樣是256個。
只不過前者表達的是0到255這256個數,后者表達的是-128到+127這256個數

有符號數包括負數,無符號數只有整數而已,在同一數據類型中,由於內存長度是一樣的,所以無符號數比有符號數的最大值大1倍。

 

那對於java的數據類型,我們就只有有符號的數據類型了,如short 的表示范圍 -128到+127,這就是代表有符號的數據類型了。

java沒有無符號類型,都是有符號類型的數據類型。但是其它語言,如c的unsigned short 無符號數,它值的范圍就是要從0開始,並且比java的short類型保存的數據范圍更大。

在實際開發中,可能要與c寫的硬件接口,網絡接口相互直接數據交互,此時由於java沒有無符號的數據類型,導致java與c看似相同的數據類型,其實存儲空間確是不同的,這個問題解決方法是java用更高的存儲數據類型,如果c用int,你的java就要考慮用Long或者BigInteger了。還有一種方法就是用java的guava框架來實現你的目標了。你自個其實也可以寫,但是容易出問題哦。

 

哎,不多說了......java省去了一些東西,與其余語言交互也會以空間換時間。

 


免責聲明!

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



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