二進位制中以最高有效位作為符號位,1 表示負數 0是正數。
現在假設 -29 和 -25 最高有效位為 8 位 ,透過正數的二進位制 求補運算 取反+1 得到對應負數的二進位制
29 的二進位制 0001 1101 取反 11110 0010 +1 11110 0011
25 的二進位制 0001 1001 取反 11110 0110 +1 11110 0111
得到兩個負數的二進位制後 -29-25 就變成了 (-29)+(-25) 的加法了
11110 0011
+ 11110 0111
= 11100 1010 這個就是結果了 -54的8位表示
(進位1)
無論-29和-25 用多少位來儲存,演算法都可如此,
比如你在C中聲明瞭 int a=-29 在C中 int 似乎是 雙字,也就是32 位,
29 的二進位制變成 0000 0000 0000 0000 0000 0000 0001 1101
-29 就變成 1111 1111 1111 1111 1111 1111 1110 0011
看起來很長,但實質不變
二進位制中以最高有效位作為符號位,1 表示負數 0是正數。
現在假設 -29 和 -25 最高有效位為 8 位 ,透過正數的二進位制 求補運算 取反+1 得到對應負數的二進位制
29 的二進位制 0001 1101 取反 11110 0010 +1 11110 0011
25 的二進位制 0001 1001 取反 11110 0110 +1 11110 0111
得到兩個負數的二進位制後 -29-25 就變成了 (-29)+(-25) 的加法了
11110 0011
+ 11110 0111
= 11100 1010 這個就是結果了 -54的8位表示
(進位1)
無論-29和-25 用多少位來儲存,演算法都可如此,
比如你在C中聲明瞭 int a=-29 在C中 int 似乎是 雙字,也就是32 位,
29 的二進位制變成 0000 0000 0000 0000 0000 0000 0001 1101
-29 就變成 1111 1111 1111 1111 1111 1111 1110 0011
看起來很長,但實質不變