有符號數與補碼

2021-10-08 11:21:54 字數 445 閱讀 9186

對於unsigned int,其資料範圍為[0,2^32 - 1]。

補碼和原碼都是對於有符號數而言的。

對於int,

[0,2^31 - 1]為正數,

[-2^31,-1]為負數。

對於負數-x來說,補碼表示實際上為2^n - x,其中n為該數的位數,則-x與x相加剛好為0。

那麼我們注意到,對於x∈[0,2^31 - 1],32位表示,則最大的數2^31 - 1,其最高位為0(小於該數的也是如此),其餘位為1,故最高位為0,則判斷為正數。

對於[-231,-1],32位表示,則最大的數-1,補碼表示為232 - 1,最高位為1(小於該數的也是如此),故最高位為1,判斷為負數。

(補碼計算公式:正數補碼=原碼,負數補碼=原碼取反+1)

eg:unsigned a = -1; //0xffffffff

coutcout《參考:

無符號數 有符號數 與 補碼

本文是深入理解計算機系統這本書裡面關於補碼有符號數無符號數章節的乙個摘要和讀書報告,我個人認為這本書關於這一段的表述,要比絕大多數網上的部落格甚至是國內教材要深入淺出的多.同時由於markdown的文件表示公式很麻煩,本文將大量使用書中的截圖作為公式使用.書中採用乙個函式b2u w binary t...

位元組 字長 移位,補碼,有符號數與無符號數

位元組是最小的記憶體定址單元,乙個位元組是由8位二進位制數組成的,而二進位制數是記憶體的最小單元。字長是記憶體單元的位址的位數,每個字長指向乙個位元組,也就是c 指標中存放的位元組個數。比如32位字長的機器,虛擬位址範圍就是0 2 32 1,虛擬位址對應的是虛擬記憶體,虛擬記憶體就是乙個抽象的概念,...

原碼,反碼,補碼,有符號數和無符號數

請先看以下博文 原碼,反碼,補碼 詳解 c語言系列 二 有符號數和無符號數詳解 有符號數,無符號數 對於乙個二進位制數,它可以是有符號數,也可以是無符號數,具體是哪個,由 決定。比如 1000 0001無符號數 當前二進位制的大小,即1000 0001表示129 有符號數 將最左邊一位做為符號位,剩...