Java中Short型別轉換為Int型別是如何計算的?原碼、反碼、補碼是什麼?

Radish蘿蔔發表於2020-09-25

前言

今天在複習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基礎吧!

相關文章