二進位制裡用補碼錶示表示負數的好處就是不用管加數正負直接加然後直接捨去最高位的進位(溢位部分)就可以得到正確的結果。舉個例子,以8位整型為例,-1+(-1)在十六進位制裡就是FF+FF=1FE,最高位1在第9位,直接捨去,得到FE,剛好就是-2。囉嗦幾句,以下純屬個人見解,歡迎指正。大一學c語言的時候對反碼補碼一頭霧水,完全不理解為何要用補碼這麼反人類的設計。知道後來學了組合邏輯電路用閘電路實現加法器之後才發現補碼的精妙之處。還是以8位整型為例,十進位制-1的補碼是FF,從無符號整型的視角來看,這個數就是255,它的特點是比256小1,而256和0有一個共同點,就是他們在二進位制裡低8位都是0。所以補碼的設計原理就是把比0小x的數對映到比256(此處以8位系統為例,若16位的話就是65536)小x的數。這樣一來硬體加法器就不必考慮加數的符號,無論正負,無論是否有符號,都可以統一到同一個加法器硬體電路里。1. 兩個正數相加自然不必多說,這是加法器的基本功能;2. 兩個負數相加,直接執行補碼相加,得到的結果自然就是和的補碼,當然最高位的進位會直接被加法器忽略,在硬體上這很自然,想不忽略都不行,因為8位的加法器是容不下第九位數的。比如-1+(-1)加法器執行FF+FF應該得到1FE,由於加法器是8位的,輸出的結果就是FE,FE剛好是-2的補碼;3. 一正一負相加,如-1+1,就是FF+01=100(都是16進位制),捨去第9位後就是00,也就是十進位制的0。綜上,在使用補碼的系統裡,上述三種情況對於加法器是無差別的,這對硬體設計就相當友好了。
二進位制裡用補碼錶示表示負數的好處就是不用管加數正負直接加然後直接捨去最高位的進位(溢位部分)就可以得到正確的結果。舉個例子,以8位整型為例,-1+(-1)在十六進位制裡就是FF+FF=1FE,最高位1在第9位,直接捨去,得到FE,剛好就是-2。囉嗦幾句,以下純屬個人見解,歡迎指正。大一學c語言的時候對反碼補碼一頭霧水,完全不理解為何要用補碼這麼反人類的設計。知道後來學了組合邏輯電路用閘電路實現加法器之後才發現補碼的精妙之處。還是以8位整型為例,十進位制-1的補碼是FF,從無符號整型的視角來看,這個數就是255,它的特點是比256小1,而256和0有一個共同點,就是他們在二進位制裡低8位都是0。所以補碼的設計原理就是把比0小x的數對映到比256(此處以8位系統為例,若16位的話就是65536)小x的數。這樣一來硬體加法器就不必考慮加數的符號,無論正負,無論是否有符號,都可以統一到同一個加法器硬體電路里。1. 兩個正數相加自然不必多說,這是加法器的基本功能;2. 兩個負數相加,直接執行補碼相加,得到的結果自然就是和的補碼,當然最高位的進位會直接被加法器忽略,在硬體上這很自然,想不忽略都不行,因為8位的加法器是容不下第九位數的。比如-1+(-1)加法器執行FF+FF應該得到1FE,由於加法器是8位的,輸出的結果就是FE,FE剛好是-2的補碼;3. 一正一負相加,如-1+1,就是FF+01=100(都是16進位制),捨去第9位後就是00,也就是十進位制的0。綜上,在使用補碼的系統裡,上述三種情況對於加法器是無差別的,這對硬體設計就相當友好了。