關於補碼,原碼,反碼的思考--嘟嘟胖

       關於補碼,原碼,反碼的問題,說簡單,很簡單,基本人人都會算,會求解  可是沒幾個人能對這幾個概念的來龍去脈搞得清清楚楚,明明白白的. 比如,爲什麼引入編碼,爲什麼引入原碼,又爲什麼引入反碼. 反碼存在的意義是什麼,補碼的引入原因,爲什麼補碼能夠把符號位一起運算?補碼的優勢到底在哪裏?我們應該對問題多多思考,多想幾個爲什麼. 如果你搞不懂來龍去脈,恐怕後面的操作幾乎可以把你搞得暈頭轉象,好象懂了,會做題了.可是心理總覺得沒喫透,對吧??
      下面我把我的思考分享給大家:
      計算機的基本功能是對信息進行處理.所以我們引出了一個重要的概念  信息表示的數字化,包括信息的表示 ,信息的存儲,信息的轉化,信息的加工,信息的傳送,和對這些過程的控制.
       首先,我們把重點放在信息的表示,計算機中進位記數制,我想應該都明白爲什麼用二進制吧? 然後我們就需要對它進行編碼? 爲什麼要進行編碼呢,在人腦中只是約定了+爲正數,-爲負數,就可以在人腦中進行高度抽象的運算了,但是,在計算機中不行啊,計算機很傻的,計算機中的任何行爲都依賴於它的物理結構,它沒有思維的. 所以你必須告訴它什麼是正,什麼是負! 所以我們必須進行編碼,以區分正負.

原碼的出現與衰落

        最開始的時候,人們約定在數前面第一位用做表示符號的位, 1表示負 0 表示正. 他們稱之爲原碼. 很不錯,可以成功的區分出正負了.  可是馬上就意識到它的一些侷限性了.
       1  加減的不方便,  符號位需要單獨處理,單獨判斷.同0相加或相減,那好判斷. 可異號呢? 那就涉及一個判斷是否夠減的邏輯了.很難做到.

       2  +0 表示爲 0000 -0 表示爲 1000  ,這就存在二義性了,計算機中是絕對不能容惹二義性的東西存在的.

補碼的大放光彩
        
       原碼的缺點使人們要找出一種新的編碼,這種編碼就是補碼.首先它必須繼承原碼的特點(可以表示正負)而且它至少應該有兩個優點,可以把符號位一起運算和0沒有二義性.怎麼才能做到呢? 如果是你,你能創造出這種編碼嗎?
       在日常生活中,我們發現時鐘有這樣一個特點,就是以12爲模,13點是多久呢?捨棄模12 大家都知道就是1點了. -1 點也就是11點. 兩者是完全等價的,因爲它們有模12. 通過這個特點可以做什麼?  大家注意了,可以變減爲加啊,比如:-1點再過5個小時是幾點, -1+5=4點,我們可以這樣變換  (-1+12)+5=4  ,你會發現這個等式是不是錯了?應該是16對啊,你錯了,滿12就已經溢出了,只剩下4.
       而計算機是否也有這個特點呢?答案是肯定的,實現模運算的基礎顯然就是寄存器的長度是固定的.那麼變減爲加那就算是實現了.例如82-54=82+46=(1)28  ,那麼到底是怎麼樣才能把符號位一起運算呢?我們知道正數的補碼就是本身,負數的補碼就變反加一. 我們來舉個例子  比如異號想加 A-B=87-25,我們把它轉換成補碼=0(87)+1(75)=062,嘿嘿,發現沒有 符號位一起運算了.結果爲62,再來,把它反過來 25-87 ,轉換成補碼0(25)+1(13)=1(38),這裏有的同會說,不對了,結果不應該是-38. 你再仔細看看,我提示下補碼+補碼=? ,也是等於補碼啊,1(38)的真值是-62,對吧?  完全可以把符號一起運算.
       最關鍵的部分就在這裏了,把符號位一起運算的理論依據是什麼,什麼樣的編碼可以連同符號位一起運算,而原碼爲什麼不能把符號位一起運算? 經過我一天一夜的思考 :),大家看看這樣理解對不對. 數 A ,有正有負,對吧? 也就是A+(-A)=0 ,哈哈,就是它了,我們設A=0001,你看原碼,A=00001,-A=10001,A+(-A)=10010,哈哈1+(-1),變成-2了,再看補碼 00001+11111=00000,哈哈,完全正確,你如果再要去想爲什麼,也很簡單了一個數加去它的補數=什麼? 當然=模了,模的定義就是模減去一個數的結果就是這個數的補數. 等於模了,捨去模,那不就變成0 了.  這就是連同符號位一起運算的依據.
       你還會發現一個特點,這個特點在我們物理上的具體實現時是相當重要的.請看原碼 0001=0000000001,而1001是否等於111111111001呢,很明顯是不可能的. 而補碼1001絕對是等於1111111001的,不信你算算看,這個性質就叫符號的可擴充性.
       
反碼的出現原因

       哈哈,補碼很明顯是我們的最佳選擇了,爲什麼又弄一個叫反碼的東西來,我看到這裏的時候也是很不理解,還是韓大師那句話,要多思考.它是怎麼回事呢?它的思路應該是反過來的,我們聯繫聯繫具體的邏輯元器件,是不是有個非門的東西啊?你是1它變成0 ,0變成1,說白了就是按位取反啊,所以反碼是從下層映射上來的東西,我們爲什麼要研究它,就是因爲它的物理太容易實現了,我們不得不研究它的性質,研究它與我們的補碼的關係. 結果,果不起然,關係密切着呢,是什麼啊,反碼加1就變補碼了.

這就是三大編碼了,原碼,反碼,補碼.  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章