Can you summarize the following document?
        
  

  以下用4位元的二補數數字來說明二補數系統的數字表示方式。  以上的表示方式在電腦處理時格外方便,用以下的例子說明:  結果10010似乎是錯的,因為已經超過四個位元,不過若忽略掉(從右開始數)第5個位元,結果是0010 (2),和我們計算的結果一樣。而且若可以將二進位制的1111 (-1)變號為0001 (1),以上的式子也可以計算減法:3-1 = 2。  在n位元的二補數加減法中,忽略第n+1個位元的作法在各種有號數加法下都適用(不過在判斷是否溢位(overflow)時,仍然會用到第n+1個位元)。因此在二補數的系統,加法電路就可以處理有負數的加法,不需另外處理減法的電路。而且,只要有電路負責數字的變號(例如將1變換為 -1),也可以用加法電路來處理減法。而數字的變號就用計算數字的二補數來完成。  在一般n位元的二進位制數字中,最高有效位元(MSB)第 n位元代表的數字為 2。不過,在n位元的二補數系統中,最高有效位元(MSB)第 n位元表示符號位元,若符號位元為0,數字為正數或0,若符號位元為1,數字為負數。以下是n位元的二補數系統中,幾個特別的數字: 因此,在8位元的二補數系統中,可以表示的最大正數為2-1 = 127,可以表示最小的負數為 -2 = -128

  在計算二進位制數字的二補數時,會將數字進行位元反相運算,再將結果加1,不考慮溢位位元(一般情形,溢位位元會為0),就可以得到該數字的二補數。  以下考慮用有符號位8位元二進位制表示的數字5:  其最高位元為0,因為此數字為正數。若要用二補數系統表示 -5,首先要將5的二進位制進行反相運算〔1變為0,0變為1  目前的數字是數字5的一補數,因此需要再加1,才是二補數:  以上就是在二補數系統中 -5的表示方式。其最高位元為1,因為此數字確實為負數。  一個負數的二補數就是其對應的正數。以 -5為例,先求數字的一補數:  再加一就是 -5的二補數,也就是5。  簡單來說,數字a(正負數皆可)的二補數即為 -a。  若要計算n位數二補數二進位制對應的十進位制,需要知道每位數對應的數字,除了最高位元外,其他位元的對應數字均和一般二進位制相同,即第i位數表示數字2。但最高位元若為1時,其表示數字為 -2,因此若用此方式計算0000 0101表示的數字,其結果為:

  有兩個數字的二補數等於本身:一個是0,另一個為該位元內可表示有符號位區分的二進位制形式的最大負數(即1000...)。  0的二補數計算方式(以8位元為例)如下:先計算它的一補數:  再將一補數加一:  忽略溢位,其結果為0(0是唯一計算二補數過程中會出現溢位的數字。)。因此0的二補數為0。而0 x (-1) = 0,因此其二補數仍滿足「數字a的二補數為 -a」的原則。  若計算1000 0000(這是8位元內可表示有符號位區分的二進位制形式的最大負數-128)的二補數:先計算它的一補數:  再加一就是它的二補數。  1000 0000 (-128)的二補數仍為1000 0000 (-128)。但(-128) x (-1) = 128,因此其二補數是以上規則的例外。  總結:由於0可以等於0的二補數-0,以及同樣因為8位元的二補數可顯示的值範圍為 -128 ~ 127,但-128的二補數128無法用在已有位元數量為8的位元數量內的可用二補數表示。【在計算其他位數內的可表示有符號位區分的二進位制形式的最大負數(即1000...000)時,也會有類似情形。】  所以:0和-128的確是「數字a的二補數為 -a」原則中兩個特別的數字。

  

  Ps:這方法不好用。有符號位區分的N=2【a為非0正整數倍的Byte數量,這個公式得出的值一律按二進位制預設自帶符號位為0的正數理解從而對應下面的推導公式運用】,同時還有0 這個型別的特殊的數字,主要原因是得出的值運用到下面的公式去,並根據溢位的bit值為0的原則,反之會出現不同Byte數量內的加減法得出的實際值沒有任何意義。  另一種正式計算一數字(以欲求得其二補數-N為例)的二補數N* 的公式如下: 其中N* 是 -N的補數,而n是十進位制數字N用二進位制表示時需要的在進位位元組內的所有有效位元數量。  以八位元的「-123」求其二補數為例【只有負數才有補碼概念,無論用哪種公式或簡便方法(比如方法二)求得補碼與之最傳統方法其二進位制正數取反加1的結果相同】:  -123的二補數計算方式如下:

  以另一種較簡單的方式,可以找出二進位制數字的二補數:  以0011 1100為例(圖中的^表示目前轉換的數字,-表示還不確定的位數):  因此其結果為1100 0100

  將一個特定位元二補數系統的數字要以較多位元表示時(例如,將一個位元組的變數複製到另一個二個位元組),所有增加的高位元都要填入原數字的符號位元。在一些微處理機中,有指令可以執行上述的動作。若是沒有,需要自行在程式中處理。==>  在二補數系統中,當數字要向右位移幾個位元時,在位移後需將符號位元再填入原位置(算術移位),保持符號位元不變。以下是二個例子:  而當一個數字要向左位移n個位元時,最低位元填n個0,權值最高的n個位被拋棄。以下是二個例子:  向右位移一次相當於除以2,利用算術移位的方式可以確保位移後的數字正負號和原數字相同,因為一數字除以2後,不會改變其正負號。 注意:向左位移一次相當於乘以2,雖然乘以在理論上並不會改變一個數的符號,但是在二補數系統中,用以表示數的二進位制碼長度有限,能夠表示的數的範圍也是有限的:若一個數的高權值上的數位已經被佔用,此時再將這個數左移若干位(乘以2)的話,有可能造成數位溢位(overflow),高權值上的數將會失去,對於絕對值很大數,這將造成整體表達的錯誤。

  為什麼二補數能這麼巧妙實現了正負數的加減運算?答案是:指定n位元字長,那麼就只有2個可能的值,加減法運算都存在上溢位與下溢位的情況,實際上都等價於模2的加減法運算。這對於n位元無符號整數型別或是n位元有符號整數型別都同樣適用。  例如,8位元無符號整數的值的範圍是0到255.因此4+254將上溢位,結果是2,即formula_5。  例如,8位元有符號整數的值的範圍,如果規定為−128到127,則126+125將上溢位,結果是−5,即formula_6。  對於8位元字長的有符號整數型別,以2即256為模,則  formula_7  所以模256下的加減法,用0, 1, 2,..., 254,255表示其值,或者用−128, −127,..., −1, 0, 1, 2,...,127是完全等價的。−128與128,−127與129,...,−2與254,−1與255可以互換而加減法的結果不變。從而,把8位元(octet)的高半部分(即二進位制的1000 0000到1111 1111)解釋為−128到−1,同樣也實現了模256的加減法,而且所需要的CPU加法運算器的電路實現與8位元無符號整數並無不同。  實際上對於8位元的儲存單元,把它的取值[00000000,..., 11111111]解釋為[0, 255],或者[-1, 254],或者[-2, 253],或者[-128, 127],或者[-200, 55],甚至或者[500, 755],對於加法硬體實現並無不同。

  

  二補數系統數字的加法和一般加法相同,而且在運算完成後就可以看出結果的正負號,不需特別的處理。  正數與負數相加不會出現上溢錯誤,因為它們的和一定會小於加數。上溢錯誤只有在兩個正數或兩個負數相加時才可能發生,這時候最高有效位(正負號)會變成相反。  以15加-5為例:  由於加數和被加數都是8位元,因此運算結果也限制在8位元內。第8位元相加後產生的進位制不考慮(因為不存在第9位元)的1被忽略,所以其結果為10。而15 + (-5) = 10,計算結果正確。  在以上計算式中,可以由進位制列的最左側二個位元得知結果是否出現溢位。溢位就是數字的絕對值太大,以致於無法在指定的二進位制位元個數來表示(在此例中,是超過8位元的範圍)。若進位制列的最左側二個位元同為0或同為1,表示結果正確,若是一個為0,另一個為1,表示出現溢位錯誤。也可以對此二個位元進行異或運算,結果為1時,表示出現溢位錯誤。以下以7 + 3的4位元加法說明溢位錯誤的情形。  在此例中,進位制列的最左側二個位元為01,因此出現溢位錯誤。溢位的原因是7 + 3的結果(10)超過二補數系統4位元所可以表示的數字範圍 -8~7。  故為防止溢位錯誤,二補數在進行加法運算時通常將符號位進行復制後追加到最高位之前,即設二補數B的位數為WIDTH,則B′={B[WIDTH-1],B}。應注意此處B′的位數為WIDTH+1。 如上兩例用此方法進行計算:  由於WIDTH+1=8+1=9,故而第十位的1同樣由於溢位而被省略,結果仍為10。兩負數(符號位為1)相加時同理。  由於WIDTH+1=4+1=5,故第五位的0仍為符號位,得結果正數10(十進位制)。

  減法通常轉化為加法進行運算,將被減數與減數的補碼進行加法運算,即可得出差。

  乘法在電腦的世界裡其實就是不斷的做加法。  例如:3*5=3+3+3+3+3=15

  除法就是相減。  例如:10/3=10-3-3-3=1mod3 而減法又可做二補數相加,所以所有四則運算的基礎都是由加法而來。
二補數(英語:2's complement)是一種用二進位制表示有號數的方法,也是一種將數字的正負號變號的方式,常在電腦科學中使用。二補數以有符號位元的二進位制數定義。