樓主這裡應該指的是具有固定位數的二進位制整型數的加減法計算,而不涉及多精度、任意精度或其它進位制的整型數,或浮點數的計算吧。計算機一般使用8的倍數,例如8、16、32、64這樣的固定位數來表示整型數。對於佔有n位的整型數,它可能有2^n個不同的取值。具體來說,對無符號整型,取值範圍為[0, 2^n),對有符號整型,取值範圍為[-2^(n-1), 2^(n-1))。有符號整型和無符號整型,在表示正數或0時,都用其二進位制表示;而有符號整型在表示負數時,使用其補碼錶示:對於負整數-m,其補碼的二進位制結果為2^n-m。顯然負數補碼的二進位制大於所有整數的二進位制,且最高位為1。即是對於二進位制p,如果p<2^(n-1),被認為是0或整數;對p>=2^(n-1),被認為是負數2^n-p。例如對8位無符號整數,其二進位制範圍[0, 256)對應值的範圍為[0, 256),對8位有符號整數,其二進位制範圍[0, 128)對應值範圍[0, 128),而二進位制範圍[128, 256)對應[-128, 0)。而計算機上對n位數的加法計算使用的是模2^n加法:a+b實際上被解釋為(a+b)%2^n。所以兩個正數a和b的差a-b,可認為a+(-b),在計算機上的運算為[a+(2^n-b)]%2^n=[2^n+(a-b)]%2^n,當a>=b時,結果為a-b;當a<b時,二進位制結果為[2^n-(b-a)],是負數-(b-a)的補碼,結果為-(b-a)或-a-b。一個負數-a和一個正數b之差-a-b,可認為-a+(-b),在計算機上運算為[(2^n-a)+(2^n-b)]%2^n=[2^n-(a+b)]%2^n,當(a+b)<=2^(n-1)時,被認為是-(a+b)的補碼,結果為-(a+b);,當(a+b)>2^(n-1)時,此時將被解釋為正數2^n-(a+b),計算結果溢位,結果不正確。對於有符號整型,兩個正數a和b的和可能得到一個負數:當a+b>=2^(n-1)時,結果為(a+b)%2^n=[2^n-(2^n-(a+b))],被解釋為負數-[2^n-(a+b)]或a+b-2^n。希望以上答案對你有幫助。
樓主這裡應該指的是具有固定位數的二進位制整型數的加減法計算,而不涉及多精度、任意精度或其它進位制的整型數,或浮點數的計算吧。計算機一般使用8的倍數,例如8、16、32、64這樣的固定位數來表示整型數。對於佔有n位的整型數,它可能有2^n個不同的取值。具體來說,對無符號整型,取值範圍為[0, 2^n),對有符號整型,取值範圍為[-2^(n-1), 2^(n-1))。有符號整型和無符號整型,在表示正數或0時,都用其二進位制表示;而有符號整型在表示負數時,使用其補碼錶示:對於負整數-m,其補碼的二進位制結果為2^n-m。顯然負數補碼的二進位制大於所有整數的二進位制,且最高位為1。即是對於二進位制p,如果p<2^(n-1),被認為是0或整數;對p>=2^(n-1),被認為是負數2^n-p。例如對8位無符號整數,其二進位制範圍[0, 256)對應值的範圍為[0, 256),對8位有符號整數,其二進位制範圍[0, 128)對應值範圍[0, 128),而二進位制範圍[128, 256)對應[-128, 0)。而計算機上對n位數的加法計算使用的是模2^n加法:a+b實際上被解釋為(a+b)%2^n。所以兩個正數a和b的差a-b,可認為a+(-b),在計算機上的運算為[a+(2^n-b)]%2^n=[2^n+(a-b)]%2^n,當a>=b時,結果為a-b;當a<b時,二進位制結果為[2^n-(b-a)],是負數-(b-a)的補碼,結果為-(b-a)或-a-b。一個負數-a和一個正數b之差-a-b,可認為-a+(-b),在計算機上運算為[(2^n-a)+(2^n-b)]%2^n=[2^n-(a+b)]%2^n,當(a+b)<=2^(n-1)時,被認為是-(a+b)的補碼,結果為-(a+b);,當(a+b)>2^(n-1)時,此時將被解釋為正數2^n-(a+b),計算結果溢位,結果不正確。對於有符號整型,兩個正數a和b的和可能得到一個負數:當a+b>=2^(n-1)時,結果為(a+b)%2^n=[2^n-(2^n-(a+b))],被解釋為負數-[2^n-(a+b)]或a+b-2^n。希望以上答案對你有幫助。