程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 我也要學C語言-第五章:編碼(1)- 補碼

我也要學C語言-第五章:編碼(1)- 補碼

編輯:關於C語言

原碼:

    因為CPU只能做加法,於是人們想到了用這樣的辦法來實現減法:

1 - 1 = 1 + (-1)
這樣的話:二進制就是(00000001)原 + (10000001)原 = (10000010)原 = -2 /*原碼的二進制最高位0表示正,1表示負*/

  這樣做顯然結果是不正確的。不正確的原因是在進行加減運算時需要同時考慮數的符號和幅值這兩個因素!!!而且,這樣做還會帶來兩個0的情況:+0 = 00000000      -0 = 10000000. 我想啊!CPU只能做加法就是為了精簡!要是現在這樣做還多了幾個累贅!因為它不會這樣傻的。嘿嘿!

  反碼:

    當是正數的時候呢,它的反碼與原碼一樣!負數呢!就符號位為1,其他位都取反!同理,反碼表示依然有上訴情況存在。

  補碼:

    補碼呢!這裡就講個小故事了!有個成語叫南轅北轍!講述了一個人要乘車到楚國去,由於選擇了相反的方向又不聽別人的勸告,只能離楚國越來越遠了。告訴我們,無論做什麼事,都要首先看准方向,才能充分發揮自己的有利條件;如果方向錯了,那麼有利條件只會起到相反的作用。其實呢!地球是圓圓的呢!就像選擇了相反的方向只要執著的走下去也會到達想要去的地方的!呵呵!只是這樣的話,你到達目的地的時間會要得多而已。因為只要到達目的地就行,不會在乎你是從哪個方向來的,因為要的結果是你人在那裡了就行。呵呵!不論你在地球上轉了多少圈,在終點的那個人永遠都不知道你的轉了多少圈的。在計算機中,比如一位中,那一位不論怎麼加啊加啊,它就只會表達0啊,1啊。

    再說個例子,在十進制數中,現在有一個數是7,你如何做能讓它變成1個個位是4的數呢,你可以這樣做:7 - 3 = 4;也可以這樣做哦!:7 + 7 = 14;你仔細看看,它們的個位都是4吧。這個和南轅北轍也是一個到底。不論你轉了地球多少圈圈。這樣呢,可以總結為:a, b屬於[0, N),而且 a + b = N.這樣則可以說這兩個數互補!!!也就是a為b的補碼,b為a的補碼!N就成為模!

    總結:所以呢!現在可以這樣總結:要求1個數的補碼就是用模去減去這個數,例如:模為10000,我們希望對1001求補,但是呢!這裡10000和1001位數不一樣不方便做運算,我們就先把10000減1,得到1111,然後用1111減1001這樣就得到了0110.這樣就知道了一個數的反碼和補碼相差1,所以在反碼的尾數上加1就得到了補碼!

  從早上8點思考到現在過去了11個小時,不過總算弄明白了!嘿嘿!!!以前聽說指針是C語言的靈魂!現在覺得補碼也是靈魂啊,想了很久很久啊!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved