計算機中,int型別占用4個位元組,byte型別占用1個位元組;
當int型別強轉為byte型別時,計算機會擷取最後的八位(1個位元組);
由於計算機儲存資料時,都是以補碼的形式進行儲存。
然而,我們通常看到的數卻是計算機儲存的補碼先轉換成反碼,後轉換成原碼,再轉換成十進位制呈現的。
正數: 原碼 = 反碼 = 補碼
負數: 原碼取反 = 反碼(符號位不變); 反碼 + 1 = 補碼(符號位上的進製捨棄)
int a = 128,轉換成二進位制形式是0000 0000 0000 0000 0000 0000 1000 0000,
由於正數的原碼=反碼=補碼,因此計算機儲存的是0000 0000 0000 0000 0000 0000 1000 0000。
int a = -128,轉換成二進位制形式是1000 0000 0000 0000 0000 0000 1000 0000,
由於負數的原碼、反碼與補碼的轉換關係是:原碼取反=反碼(符號位不變),反碼+1=補碼;
反碼:1111 1111 1111 1111 1111 1111 0111 1111
補碼:1111 1111 1111 1111 1111 1111 1000 0000
因此,在計算機中儲存的是1111 1111 1111 1111 1111 1111 1000 0000
int a = 128;
byte b = (byte) a; // b=-128
首先,由上述第乙個例子得知,128在計算機中儲存的補碼形式為0000 0000 0000 0000 0000 0000 1000 0000,
此時強制轉換成byte型別的資料時,計算機會自動擷取最後的八位(1個位元組)1000 0000,
由補碼最高位為1得知,轉換後的資料是乙個負數,
根據負數補碼求反碼,我們可以得到該數的反碼是1111 1111,
根據負數反碼求原碼,可得到該數的原碼是1000 0000
型別轉換函式int
型別轉換函式int include include include using namespace std class binary for i 0 i 16 len i bits i 0 binary int a 整型引數建構函式 friend binary operator binary bin...
int與string型別轉換
int型別到string型別的轉換在程式設計中經常用到,每次都是忘了就查,然後還記不住,今天索性總結一次。int型別轉string型別的方法目前我總結出了三種,如下所示 1 使用itoa include include using namespace std int main 注意這種方法在code...
micropython進行int型別轉換
方法一 基於數字的大小比較 to int16 dec lambda x 32768 x if x 32768 else x to int16 dec 32769 1方法二 基於最高位是否為負號位 1 to int16 lambda x x 0x7fff if x 0x8000 else x to i...