java高位转低位注意事项,int转 short/byte溢出过程
對上述代碼的輸出結果有沒有人覺得是89呢,現實中看見不少直接使用java保留字進行強制高位轉低位的。
上述代碼輸出結果是21。
我們都只知道int類型占用的是32位,4字節,byte類型是占用一字節共八位,因此有符號byte最大存儲的數值是127。
從32位int強制轉換成byte類型必定要舍去高位的24位,只保留低八位。
123456789變成21的大致過程如下:
1:?? 123456789對應的二進制(原碼)是:00000111???? 01011011??? 11001101??? 00010101
2:在計算機組成原理課程中我們知道數字在計算機中是以補碼的方式存儲,正數補碼和原碼一樣,負數補碼為原碼除去符號位(最高位為符號位)之外其它位按位取反再加一,因此123456789取低八位得到的補碼就是00010101,因為得到的低八位的最高位是0,因此是正數,我們直接將其轉換為10進制就得到了21。
從上述過程我們可以知道正數高位強制轉換成低位可能出現正數變成負數的情況,因此需要謹慎將整數當成字符串類似處理 ,除非一個高位整數我們能確定強制類型轉換后不會舍去非零位,并且不會整數變成負數。如:
short a = 4;?? (00000000?? 00000100)
byte b = (byte) a; (取低八位得到00000100)
得到的數值依然是4。
總結
以上是生活随笔為你收集整理的java高位转低位注意事项,int转 short/byte溢出过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot优雅停机
- 下一篇: 单例模式volatile