3 回答

TA貢獻(xiàn)1817條經(jīng)驗 獲得超6個贊
在我解釋這個之前,讓我們回到基礎(chǔ)。2'補(bǔ)碼是1的補(bǔ)碼+ 1?,F(xiàn)在,什么是1的補(bǔ)碼,以及它的意義又是什么。
任何n位數(shù)字及其1的補(bǔ)數(shù)之和為您提供了可以由這些n位表示的最大數(shù)字。例:
?0010 (2 in 4 bit system)
+1101 (1's complement of 2)
___________________________
?1111? (the highest number that we can represent by 4 bits)
現(xiàn)在,如果我們嘗試將結(jié)果再加1,將會發(fā)生什么。這將導(dǎo)致溢出。
結(jié)果將1 0000是0(因為我們正在處理4位數(shù)字,(左側(cè)的1是溢出)
所以,
Any n-bit number + its 1's complement = max n-bit number
Any n-bit number + its 1'complement + 1 = 0 ( as explained above, overflow will occur as we are adding 1 to max n-bit number)
然后有人決定將1的補(bǔ)碼+ 1稱為2'補(bǔ)碼。因此,上面的語句變?yōu)椋喝魏蝞位數(shù)字+它的2的補(bǔ)碼= 0,這意味著一個數(shù)字的2的補(bǔ)碼=-(該數(shù)字的)
所有這一切又產(chǎn)生了一個問題,為什么我們只能使用n位中的(n-1)代表正數(shù),為什么最左邊的n位代表正負(fù)號(最左邊的0代表+ ve數(shù),而1意味著-ve號)。例如,如果第32位為1,則為什么僅使用java中int的前31位表示正數(shù),即它的a -ve數(shù)。
?1100 (lets assume 12 in 4 bit system)
+0100(2's complement of 12)
___________________________
1 0000(結(jié)果為零,進(jìn)位1溢出)
因此,(n的n + 2'的補(bǔ)數(shù))= 0的系統(tǒng)仍然有效。這里唯一的歧義是2的12的補(bǔ)碼是0100,除了2s補(bǔ)碼系統(tǒng)中表示-12之外,它也歧義地表示+8。
如果正數(shù)的最左位始終為0,將解決此問題。在那種情況下,它們的2的補(bǔ)碼在其最左邊的位將始終為1,并且我們不會出現(xiàn)表示2的補(bǔ)碼和+ ve數(shù)的同一位集合的歧義。
- 3 回答
- 0 關(guān)注
- 770 瀏覽
添加回答
舉報