聊聊java基礎,int值強制類型轉換成byte


知識點:byte、short、char在表達式中會自動提升為int

之前做一個應用時,打印IP地址,因為是用4個byte存儲的,所以打印的時候值范圍是-128~127,考慮了下怎么快速轉換成int值。然后今天抽空把整個完整的過程思考下,然后寫下來。

首先int強制類型轉換成byte,直接取低8位,這個大家可以自己試試,不管int值是多少,轉化后的byte二進制與int的第八位二進制一樣。所以如果int的第八位是1,轉成byte就是負值,否則就是正值。

這時候我們思考下,怎么把byte值還原成int值

  • 如果int值范圍為-128~127,int值和byte值一致。

  • 如果int值大於255或者小於-256,值肯定是還原不了,信息已經丟失一部分。

  • 如果int值大於127小於等於255,第八位是1,相應的byte是負值,使用int x = b&0xff,因為b在表達式里面會自動提升為int,所以會在高位補齊1,因為我們知道對應的int是正值,所以這時把高於8位的1全部換成0。

  • 如果int值小於-128大於等於-256,第八位是0,前面所有位都是1,相應的byte是正值,使用int x=b|0xffffff00,b在表達式中自動提升為int,所以高位補齊0,把第八位前面所有的0替換成1,就可以得到正確的值。

很多事情深追一下,還是有很多細節可以挖掘一下的。


免責聲明!

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



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