十進位制轉二進位制補碼、原碼,抑或是反過來二進位制補碼、原碼轉十進位制,都擁有一套轉化的規則,且較為簡便。但是,計算機為什麼要有補碼出現?原碼、反碼不行嗎?疑惑........
站在人的角度(十進位制),以1+2=3為例,在計算機中如果這些常量以原碼或反碼儲存在計算機中,假定占用乙個位元組。則:
若採用原碼:1在儲存單元中為「0000 0001」,2在儲存單元中為「0000 0010」,那麼,按位相加可得到「0000 0011」,該二進位制串依舊為原碼,轉化為十進位制則為3,正確,沒有問題!
若採用反碼:1在儲存單元中為「0000 0001」,2在儲存單元中為「0000 0010」,那麼,按位相加可得到「0000 0011」,該二進位制串依舊為反碼,轉化為十進位制則為3,正確,沒有問題!
這似乎看起來,對計算機來講,計算機只要在對兩個二進位制串按位加減且進製就可實現數的加減等運算,然而並不能
以-1+2=1為例,假定占用乙個位元組,則:
若採用原碼,很顯然無法表示負數-1
若採用反碼:-1在儲存單元中為「1000 0001」,2在儲存單元中為「0000 0010」,那麼,按位相加可得到「1000 0011」,該二進位制串依舊為反碼,轉化為十進位制則為-3,與期望的結果不同
從以上可以看出,對十進位制進行原碼或反碼編碼都不能使計算機在加減等運算時使用同一套規則,即「按位加,能進製就進製」,運算是計算機的核心吧,倘若最基礎的運算都不能具有規範式的準則,那應該對計算機來講很難接受吧。
不討論人們是如何發現採用補碼可以滿足「計算機使用同一套規則處理加減運算」,反過來,補碼真的能讓計算機處理加減運算時就只需一條準則嗎?
依舊以-1+2=1為例,採用補碼,且假定占用乙個位元組,則:
-1在儲存單元中為「1111 1111」,2在儲存單元中為「0000 0010」,「按位加,能進製就進製」,得到「0000 0001」,該二進位制串依舊為補碼,轉化為十進位制則為1.與期望值相同。
再以-1+-2=-3為例,採用補碼,且假定占用乙個位元組,則:
-1在儲存單元中為「1111 1111」,-2在儲存單元中為「1111 1110」,「按位加,能進製就進製」,得到「1111 1101」,該二進位制串依舊為補碼,轉化為十進位制則為-3.與期望值相同。
總結,雖然上面不能真正證明補碼能讓計算機處理加減運算時就只需一條準則,但不難發現,它大概就是這樣吧。計算機在處理其他運算時都是基於二進位制加法的,補碼能讓二進位制加法只需滿足一條準則,所以,才有補碼這種編碼形式的出現與應用吧。
為什麼要使用補碼
想必對於原碼,反碼,補碼大家並不陌生,計算機專業的同學都會學到這方面的一些知識。當初在學這部分的時候,只知道用補碼可以解決0和 0的問題,但是還是沒明白為什麼會想到用補碼。前陣子看了史丹福大學關於正規化程式設計的公開課,裡面老師講了這方面的內容,三言兩語給出了乙個簡單明瞭的解釋,頓時覺得好棒!思路如...
為什麼要使用原碼 反碼 補碼
前言 隨著學習計算機知識的加深,許多地方都遇到原碼 反碼 補碼。很多關於計算機的書籍都介紹原碼 反碼 補碼的表示方法,但是為什麼要用到原碼 反碼 補碼卻沒詳細說。為什麼要使用?它們的原理是什麼呢?我搜尋了許多資料,也查詢了許多書籍,終於弄明白了這個問題,收集整理如下。我們知道數值在計算機中表示形式為...
我為什麼要使用雜湊
雜湊 英語 hashing 通常音譯作雜湊,是電腦科學中一種對資料的處理方法,通過某種特定的函式 演算法將要檢索的項與用來檢索的索引關聯起來,生成一種便於搜尋的資料結構。也譯為雜湊。from 雜湊,wikipedia 實際上通俗的說法就是把某種狀態或者資料給對映到某個值上的操作。本醬大概就解釋到這裡...