基礎知識:假設有壹個n位二進制數。
那麽這個二進制數* * *有壹個狀態,這個數是最大的。
反之,用二進制寫成1000 0000,壹個* * *有8位數,後面是1的7位小數。
下面的例子都是n位數,例子是8位數。
原碼形式
簡單直接的二進制,下面以定點數為例。
定點純十進制:0 100 0000,第壹個符號位,0為正,0為負,表示0.1(10)。
定點純整數:0 000 0001這裏的意思是1(10)。
由於符號位的原因,存在正負0 0 000 0000和1 000 0000。
數據範圍:-127~127(後7位都是1)//公式如下
特點:原碼不適合加減法,適合乘除法。
基數減壹補碼
正數的負碼與其原碼相同;負數的取反是原代碼在其符號位之後的逐位取反,符號位不變(1)。
反代碼可以表示的數據範圍:與源代碼相同。
補充
目的:方便計算機加減運算。
特點:數字表示適合在機器中進行加減運算
補數可以實現計算機“加負數”的本質原理是模運算,即A減B等於A加B相對於A的補數,然後求模。就像時鐘順時針撥3小時,逆時針撥9小時的結果壹樣。
二進制補碼:
補碼=(原數+模)(mod模),顯然,如果原碼是正數,補碼就是本身,完全沒有必要考慮求正數的補碼。
對於計算機來說,由於兩個數相加的位數相同(n),且和不能超過n+1位數,所以應取的模為100000...(n個零)。
所以對於n位純小數,它的模(decimal)是2,對於n位純整數,它的模是2 n。
模塊:(1 0 000 0000)
原始代碼:(0 000 0000)
需要註意的是,雖然符號位沒有數值信息,但是這裏的取模仍然考慮了符號位,因為我們可以通過定義補碼使第壹個符號位參與計算機計算,從而得到想要的結果。
(同時,計算符號位允許我們在用數學公式法求二進制補碼時,直接從結果中得到二進制補碼。
例如:x= -0.1011。
[x]補碼= 10+x = 10.0000-0.1011 = 1.0101。
本來模的補數是0.0101(2),但是第壹個1可以代表原數的負號,所以補數可以直接讀作101。
)
因此,對於補碼,符號位不僅表示符號,還參與運算。
此外,還有兩個與原始代碼不同的零(正或負零)。在補碼的調節中,只有壹個零(00000...因為原碼全是零),還有1000...可以表示-1(純十進制補碼)或-2 n-65438+。
//可以這樣寫(以純整數為例):因為後面的n-1個零反過來就是n-1,加上1後就是2n-1 (10),前面的1代表負數。
如何求補碼:原碼為正,補碼與原碼相同;原碼為負數,後面的數字是原碼的倒數加1。
移碼的
目的:為了便於計算機比對,消除符號位對計算機的幹擾。
原理是將所有的否定部分向非負方向移動,也就是說消除第壹個符號位的意義。消除方法是:對於補數為正數,符號位從0變為1,遞增;對於補數的負數,消除了符號位的概念,在計算機中定義為正數。為了保證原來的負數小於原來的正數,符號位由1改為0。
為了保證每個數之間的大小關系不變,要用補碼將其轉換成移位碼。如果我們用原碼來換算,負數之間的大小關系就會反過來。
數學公式:
宏觀上,中間的整數軸平移到非負半軸,各數之間的大小關系不變。
純十進制[X] shift =1+X
純整數[X] shift =(通用標準)
碼移位是怎麽來的:碼移位和補碼的尾數相同,符號位相反(即補碼第壹位的1-->;0 ;0->;1)
因為碼移位來自補碼,所以也可以表示壹個額外的數。