當前位置:編程學習大全網 - 源碼下載 - 源代碼和補碼補碼

源代碼和補碼補碼

寫在前面:這篇文章是我自己在學習中寫的壹些筆記和體會,發表主要是記錄我的學習過程。我是個窮書生,筆記難免有不足甚至瑕疵,但會不定期更新。

基礎知識:假設有壹個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)

因為碼移位來自補碼,所以也可以表示壹個額外的數。

  • 上一篇:想問壹個 關於linux下 socket編程的問題! 請進
  • 下一篇:mysql數據庫引擎支持哪些事務?
  • copyright 2024編程學習大全網