Java中Short型別轉換為Int型別是如何計算的?原碼、反碼、補碼是什麼?
前言
今天在複習Java基礎時,遇到了一個問題,這也是為之前沒學好Java基礎和計算機組成原來補的一個坑。
問題
為什麼將 int 型別的12312341強轉為 short 型別後,輸出會是 -8427呢,而262199強轉後卻變成了55。再一頓查詢計算機組成原理書後,終於恍然大悟。
解析
首先 int 型別是佔32位,而 short 型別是佔16位
在計算機中表示的帶符號的二進位制數稱為“機器數”,而機器數有3中表示方法:原碼、反碼、補碼
而計算機都是用補碼進行運算的
因此,我們在int強轉為short時,就是擷取int型別數值的低16位,再將其轉換為補碼
詳細過程:
例1:12312341轉換為short型別
取其低16位為:1101 1111 0001 0101
負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反
而負數的補碼就是在其反碼的基礎上+1
因此其補碼為 1010 0000 1110 1011,轉換為10進位制就是 -8427
例2:262199轉換為short型別
取其低16位為:0000 0000 0011 0111
正數的反碼和補碼都和原碼一樣
因此其補碼為0000 0000 0011 0111,轉換10進位制就是55
總結
繼續複習Java基礎吧!
相關文章
- java 原碼、反碼、補碼計算 以及 取反(~)運算Java
- MySQL int型別長度的意義是什麼MySql型別
- 什麼是Python型別轉換?主要包含什麼?Python型別
- Ajax接收int型別亂碼型別
- 什麼是寫程式碼及基本資料型別資料型別
- 深入理解計算機中的原碼、補碼、反碼計算機
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- 計算機原碼, 反碼,補碼的介紹計算機
- Java 原碼 反碼 補碼Java
- 計算機二進位制中的原碼,反碼,補碼計算機
- 如何在 Go 中將 int 型別轉為字串Go型別字串
- 原碼、反碼、補碼及移碼的作用與區別
- BigDecimal轉為String型別、int型別Decimal型別
- CAPL指令碼中常用到的資料型別轉換——數字型別(int/double)和字串型別(char array)指令碼資料型別字串
- 什麼是MIME型別型別
- java 判斷字串什麼編碼型別Java字串型別
- 型別轉換(int 和 String)型別
- 從Java中的取反號‘~’看原碼,反碼,補碼Java
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- Linux系統把時間型別值轉換為數值型的方法是什麼?Linux型別
- 為什麼資料庫表的int型別欄位對映到實體類中要使用Integer型別,而不是int型別?...資料庫型別
- javascript值型別是什麼JavaScript型別
- 誰知道資料庫中的 longbinary型別對應的Java型別是什麼?資料庫型別Java
- java型別轉換與強制型別轉換(轉)Java型別
- 計算機為什麼要用補碼計算機
- Python做int()強制型別轉換的時候,小數是如何取捨的?Python型別
- 判斷a是否是int型別資料型別
- Oracle Long型別轉換為Clob型別Oracle型別
- myBatis原始碼解析-型別轉換篇(5)MyBatis原始碼型別
- Java資料型別及型別轉換Java資料型別
- mysql浮點型別是什麼MySql型別
- golang中time型別的這個是什麼意思?Golang型別
- 程式中算錢不能用浮點型別是個什麼坑?型別
- 漫談計算機組成原理(八)原碼、補碼、反碼計算機
- C++中的向上型別轉換和向下型別轉換C++型別
- JAVA int 強制型別轉換錯誤提示(Cannot cast from Object to int)Java型別ASTObject
- 將timestamp型別轉換為date型別型別
- 程式碼塊,資料型別的相互轉換,集合資料型別