知識點: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,就可以得到正確的值。
很多事情深追一下,還是有很多細節可以挖掘一下的。