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基礎吧!
相關文章
- 原碼,反碼,補碼相互轉換
- 看下面程式碼,判斷a和b的型別是否為true?為什麼?什麼是基本包裝型別?[程式碼]型別
- BigDecimal轉為String型別、int型別Decimal型別
- 什麼是Python型別轉換?主要包含什麼?Python型別
- Ajax接收int型別亂碼型別
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- 深入理解計算機中的原碼、補碼、反碼計算機
- 型別轉換(int 和 String)型別
- MySQL int型別長度的意義是什麼MySql型別
- CAPL指令碼中常用到的資料型別轉換——數字型別(int/double)和字串型別(char array)指令碼資料型別字串
- 什麼是寫程式碼及基本資料型別資料型別
- 計算機原碼, 反碼,補碼的介紹計算機
- 如何在 Go 中將 int 型別轉為字串Go型別字串
- java中的型別轉換Java型別
- 計算機二進位制中的原碼,反碼,補碼計算機
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- [計組] 計算機編碼方式:原碼、反碼、補碼計算機
- Java - 5 原碼、反碼、補碼Java
- Linux系統把時間型別值轉換為數值型的方法是什麼?Linux型別
- Python做int()強制型別轉換的時候,小數是如何取捨的?Python型別
- myBatis原始碼解析-型別轉換篇(5)MyBatis原始碼型別
- 為什麼資料庫表的int型別欄位對映到實體類中要使用Integer型別,而不是int型別?...資料庫型別
- Java資料型別及型別轉換Java資料型別
- JAVA型別轉換怎麼變Java型別
- C++中string轉換為char*型別返回後亂碼問題C++型別
- 計算機為什麼要用補碼計算機
- 原碼反碼補碼
- 原碼 反碼 補碼
- 原碼、反碼、補碼
- 原碼 補碼 反碼
- 程式碼塊,資料型別的相互轉換,集合資料型別
- javascript值型別是什麼JavaScript型別
- mybaits原始碼分析--型別轉換模組(三)AI原始碼型別
- 判斷a是否是int型別資料型別
- 漫談計算機組成原理(八)原碼、補碼、反碼計算機
- Java中將 Jackson JsonNode 轉換為型別化集合JavaJSON型別
- 原碼反碼與補碼
- 為什麼說js是弱型別語言,它的優缺點分別是什麼?JS型別