2014-10-30 55 views
0

您能否爲下面的問題解釋解決方案? 我不明白我們是如何得出這個結論-2 ^(N-1)+ 2 ^(N-1)-1 -x 特別是我很困惑,爲什麼我們需要減去X需要解釋關於補碼的想法

您獲得用二進制補碼法表示負數,方法是取一個數的補碼,然後加1。它爲什麼有效?補碼錶示的關鍵思想是什麼? 答:關鍵的想法是將符號位視爲帶負號的值。在n位表示中,符號位的值爲-2^n1。 當你有一個正數x。通過採取兩個補碼你想得到-x。 在一個正數x中,符號位爲0.當您取數的補數時,得到:

-2 ^(n-1)+ 2 ^(n-1)-1 -x

通過簡化可以得到-x-1。當你給這個數字加+1時(和二進制補碼一樣:取補體並加一),你到達-x。 這提供了一個零的唯一表示。此外,所有的數字計算都是根據兩個冪的不同而不同於負數的表示。

回答

1

您提供的解決方案似乎使得One和Two的恭維解釋不必要的複雜化。簡而言之,通過翻轉數字的二進制表示中的所有位來獲得恭維。假設N = 8中,x = 13,則在一個的補

X = 00001101(無符號值13)

-x = 11110010(無符號值242 = 255 - 13)

即-x被表示爲2^N - 1 - X

二的補碼是一個簡單的補加1:

-x = 11110011(無符號值243 = 255 - 13 + 1)

即-x被表示爲2^N - X

回到你提供的解決方案:

-2 ^(N-1)=千萬

2 ^(N-1)-1 = 01111111

-2 ^(N-1)+ 2 ^(N-1)-1 = 11111111

(-2 ^(N-1)+ 2 ^(N-1)-1) - x翻譯x的二進制表示中的所有位,正是恭維所做的。國際海事組織,這種解釋是相當反直覺的,上面的解釋(或從維基百科)好得多...

0

我不知道我完全理解你的問題。二進制補碼是用來使某些事情變得更容易的格式,它只在你以某種方式限制數值(固定數量的比特)時才起作用。對於4位字,零的補碼爲1111,爲了得到二進制補碼,您需要添加一個1,將所有位逐級翻轉爲0000,這很方便。 0001的補碼是1110,加1就得到1111,當解釋爲有符號值時爲-1。

 1's  2's 
2 1101 1110 
3 1100 1101 
4 1011 1100 

第一個(MSB)位總是表示值是正還是負。其他值爲「正數」(1,2,3,4 ...),正數值爲「倒數」(-1,-2,-3 ...)爲負值。

很難用非離散代數術語來表達它,因爲我們通常認爲「數」是無限的。