C語言中的原碼,反碼,補碼

    其實吧,在我們學習C語言中會遇到好多令人頭疼的問題,比如說,原碼,反碼,補碼。看見很簡單的三個詞,可是真正理解起來會非常的麻煩,那麼我在這裏就跟大家一起來重新學習一下原碼,反碼,補碼。

    首先讓我們弄明白,什麼是原碼,什麼是反碼,什麼是補碼,要想學會這個,我們首先要弄明白他們的定義。

    所謂的原碼,就是指有符號的整數的二進制。原碼本身簡單一易懂在這裏就不做過多的解釋

    例如:

    00000001=1

    10000001=-1

    反碼,就是把原碼的符號位不變其餘的位進行取反。最高位還是一樣,當爲1的時候是正,當爲0的時候是負。對於正數來說,正數的反碼跟原碼是相同的,對於負數來說,符號位是保持不變其餘位置進行取反操作,

    例如:

    正數100的原碼爲:01100100 則100的反碼也爲:01100100

    負數100的原碼爲:11100100 則它的反碼爲:10011011

    此時需要注意:0也有兩種表現形式。

    說起來反碼理解相對而言還算簡單,那麼接下來讓我們繼續學習補碼

    補碼,對於正數來說,補碼跟原碼是相同的,對於負數而言,符號位還是保持不變,其數值位x的據對峙取反後再最低位+1。在計算機中的儲存都是用補碼來處理的

    例如:

    +9的原碼是:00001001 +9的反碼爲00001001 +9的補碼爲00001001

    -9的原碼是:10001001 -9的反碼爲11110110 -9的補碼爲11110111

    注意:在補碼中0有唯一的編碼。

    補碼的絕對值之爲真值;

以上呢,爲原碼、反碼、補碼的簡單介紹,綜上所述我們對於原碼、反碼、補碼的理解,我認爲是相當簡單了,那接下來我們看一下他們在實際中的應用,大部分爲舉例分析

    原碼的符號位不能直接參與運算,必須和其他位分開。在原碼的具體定義中還分爲小數和正數

    1.小數原碼的定義

    +0.1011的原碼就是0.1011    -0.1011的原碼就是 1.1011

    2.正數原碼的定義(略 前面提起過)

    注意,在小數原碼的定義時候,代碼中的小數點並不會出現在機器內部

    反碼

    在上面提到的數0的反碼有兩種形式

    如下:

    +0的反碼爲:00000000

    -0的反碼爲:11111111

    八位二進制反碼的表示範圍爲-128~+127

    補碼

    在補碼中,我們會提到模,那麼什麼叫做模呢?

    模的定義:把一個計量單位稱之爲模或者模數。例如,時鐘是以12進制計數循環的,即以12爲模。利用模的概念可以把計算的減法變爲加法。同理,計算機的運算部件與寄存器都有一定字長的限制(假設字長爲8),因此它的運算也是一種模運算。當計數器計滿8位也就是256個數後會產生溢出,又從頭開始計數。產生溢出的量就是計數器的模,顯然,8位二進制數,它的模數爲2^8=256。在計算中,兩個互補的數稱爲“補碼”

    補碼在微型機中是一種重要的編碼形式,請注意:

    1.採用補碼後,可以方便的將減法運算轉化成加法運算,運算過程得到簡化。

    2.與原碼、反碼不同,數值0的補碼只有一個,即000000000B

    3.若字長爲8位,則不嗎所表示的範圍爲-128~127;進行補碼運算時,應注意所得到結果不應超過補碼所表示數的範圍

    下面我們進行一個簡單的轉化案例:

    已知原碼,求反碼跟補碼,原碼爲10110110B,求出反碼和補碼

    有已知可以知道10110110B爲一個負數

    則反碼爲11001001B

    它的補碼就爲11001010B(從末端+1的到補碼)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章