舉個例子吧,假設暫存器是32位的,現在的CPU有64位的,但32位的作業系統,執行時是用32的暫存器,暫存器向下相容。假設0和1分別在A、B暫存器中,執行結果放在C暫存器中。A:0 0000000000000000000000000000000B:1 0000000000000000000000000000001你執行A-B,實際是對A取補碼,B取補碼,兩個相加放在C中,C是補碼,你透過計算可以得到它的原碼。A的補碼是0 0000000000000000000000000000000B的補碼是1 1111111111111111111111111111111A補碼加B補碼放在C中,C即為1 1111111111111111111111111111111而C的原碼我們知道C的補碼-1 結果取反即為原碼,所以C的原碼為1 0000000000000000000000000000001即結果為-1.注意:最左邊識別符號號位,0為正,1為負。從左到右表示從高位到低位。你可以注意最右邊的位,你發現可以和你說的那樣,A最右邊是0,B最右邊是1,而在結果C中的最右邊是1,可能剛好和你說的現象相符吧,但是從單個位上看。0-1的結果肯定是-1的,如果你的暫存器只有1位,那結果溢位,這時就是1.
舉個例子吧,假設暫存器是32位的,現在的CPU有64位的,但32位的作業系統,執行時是用32的暫存器,暫存器向下相容。假設0和1分別在A、B暫存器中,執行結果放在C暫存器中。A:0 0000000000000000000000000000000B:1 0000000000000000000000000000001你執行A-B,實際是對A取補碼,B取補碼,兩個相加放在C中,C是補碼,你透過計算可以得到它的原碼。A的補碼是0 0000000000000000000000000000000B的補碼是1 1111111111111111111111111111111A補碼加B補碼放在C中,C即為1 1111111111111111111111111111111而C的原碼我們知道C的補碼-1 結果取反即為原碼,所以C的原碼為1 0000000000000000000000000000001即結果為-1.注意:最左邊識別符號號位,0為正,1為負。從左到右表示從高位到低位。你可以注意最右邊的位,你發現可以和你說的那樣,A最右邊是0,B最右邊是1,而在結果C中的最右邊是1,可能剛好和你說的現象相符吧,但是從單個位上看。0-1的結果肯定是-1的,如果你的暫存器只有1位,那結果溢位,這時就是1.