在計算機中,負數以其正值的補碼形式表達。
對於任何學過匯編語言的人恐怕都不會忘記怎樣求一個二進制數的相反數:“取反加一”嘛。當時覺得這個規則的確有點兒“二”。不過沒想那么多,當時已經被剛剛接觸到的2進制和16進制沖擊地有點兒蒙了。反正挺簡單,記住就是了。做兩個練習之后想忘都忘不掉了。:-)
現在回過頭來想想,是啊,為啥捏?為啥搞得這么復雜呢?你看人家10進制,多人性啊,在前面加上或去掉一個小橫杠杠就O了。還有比這個簡單的嗎?二進制也沒理由干這脫了褲子放屁的事兒啊。何況那幫先賢也不是白給的吧,既然有必要設計出這么個反人性的東西出來,背后就一定藏着什么道理。
->答案今天找到了,是這樣:還是為了簡單!
--何解呢?。。。。。。
->從硬件設計角度的簡單!
--------------------------------------------------------------------------------------------------------------
舉個例子看看,兩個數5和-5相加。
5 的二進制表示:0101b;-5的二進制表示1011;
二者相加:
0 1 0 1
+ 1 0 1 1
----------------
1 0 0 0 0
-> 計算結果當然是0。看出嘛奧妙來了嗎?
->提示一下,如果你計算兩個無符號數:0101(十進制5)和1011(十進制11)的和,是不是也這樣算?
--是啊。但結果是16,也就是10000b
->所以計算有符號和無符號加法的唯一區別就是,計算有符號加法的時候,當置位進位位的時候,忽略之 (所以上面算式的結果是0) 。如果是兩個無符號數相加,那么就不要忽略進位位(所以結果是16,即10000b)。
->這樣一來整個加法過程(硬件加法器的設計)對於兩種運算就可以是完全一樣的。只是在處理結果的時候,針對“進位位”的處理不同就可以了。
--------------------------------------------------------------------------------------------------------------------
再舉個例子,這樣你想忘掉都難了
這回算算5+(-4)
0101(十進制5), 1100(十進制-4)
二者相加:
0 1 0 1
+ 1 1 0 0
----------------
1 0 0 0 1
按照剛學的規則處理結果:有符號數相加,忽略進位標志,取結果:1。結果沒錯吧。呵呵。
今天你學習了嗎?呵呵,:-)
轉自:http://blog.csdn.net/bobantju/article/details/5287112