3 回答

TA貢獻1817條經驗 獲得超6個贊
在我解釋這個之前,讓我們回到基礎。2'補碼是1的補碼+ 1?,F在,什么是1的補碼,以及它的意義又是什么。
任何n位數字及其1的補數之和為您提供了可以由這些n位表示的最大數字。例:
?0010 (2 in 4 bit system)
+1101 (1's complement of 2)
___________________________
?1111? (the highest number that we can represent by 4 bits)
現在,如果我們嘗試將結果再加1,將會發生什么。這將導致溢出。
結果將1 0000是0(因為我們正在處理4位數字,(左側的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的補碼+ 1稱為2'補碼。因此,上面的語句變為:任何n位數字+它的2的補碼= 0,這意味著一個數字的2的補碼=-(該數字的)
所有這一切又產生了一個問題,為什么我們只能使用n位中的(n-1)代表正數,為什么最左邊的n位代表正負號(最左邊的0代表+ ve數,而1意味著-ve號)。例如,如果第32位為1,則為什么僅使用java中int的前31位表示正數,即它的a -ve數。
?1100 (lets assume 12 in 4 bit system)
+0100(2's complement of 12)
___________________________
1 0000(結果為零,進位1溢出)
因此,(n的n + 2'的補數)= 0的系統仍然有效。這里唯一的歧義是2的12的補碼是0100,除了2s補碼系統中表示-12之外,它也歧義地表示+8。
如果正數的最左位始終為0,將解決此問題。在那種情況下,它們的2的補碼在其最左邊的位將始終為1,并且我們不會出現表示2的補碼和+ ve數的同一位集合的歧義。
- 3 回答
- 0 關注
- 772 瀏覽
添加回答
舉報