2012-06-27 89 views
1

只是想了解一些有關簽名與未簽名的解釋。我是對的,如果我說如果一個數是無符號整數,它的值通常是通過將二進制轉換成十進制來計算的。但是當涉及到有符號整數時,首先標記符號位(msb),然後計算二進制值使用2的補碼;計算的值是標有標記的實際值。簽名與未簽名的解釋

我是對的還是缺少什​​麼?

+0

我簽署的病例是否只適用於帶符號的負數? – user1466594

+0

在轉換爲「帶有可選符號前綴的小數」的情況下,是的,它可以這樣工作。該符號是分開查看的,並且絕對值(在此上下文中* *對int.minvalue存在,因爲它是無符號的)被轉換爲十進制。 – harold

+0

非常感謝@harold :) – user1466594

回答

1

是的,你是對的。當將有符號整數代表代表2的補碼構成十進制數字時,這是你怎麼做的。和2的補碼是英特爾處理器如何存儲和使用帶符號整數進行數學運算。

注意:但這個回答是而不是關於英特爾機器如何表示有符號整數。這是一般的。

您用於轉換爲十進制的技術實際上取決於硬件使用的表示。

硬件設計者可以選擇存儲有符號數爲:

  1. 符號 - 幅度(1位指定標誌,其他指定的大小,沒有補)
  2. 1的補(其中,8位11111111代表-0,並00000000一個+0
  3. 2的補數(在通用硬件普及,英特爾等)
  4. ...(還有其他辦法了。瞭解更多在Wikipedia article

而我們人類在閱讀我們的首選小數形式時需要使用相應的「轉換」。

例如如果你設計的硬件主要是乘法運算,那麼以符號數量形式存儲帶符號整數會有一定意義。你只是分別乘以符號和大小。另一方面,2的補碼是a little unwieldy to multiply, but not much

當然,2的補碼是大多數硬件(當今幾乎所有通用CPU)存儲有符號數的方式。這使得添加一塊蛋糕。

+0

謝謝@ArjunShankar – user1466594

+1

你不必做2的補碼乘法的跛腳的方式,雖然 - 下半部分只是一個常規的乘法,並有一些技巧的上半部分(我忘了什麼技巧,確切地說,真的,你在課堂外需要多久?)。無論如何,有比符號幅度更好的方式來存儲爲乘法優化的整數(例如RNS) – harold

+1

@harold - 正確。我的意圖是給出一個簡單的解釋,同時保持有不同的表示可用。 「修正的Baugh-Wooley乘數」就是將2的補數相乘的一種方法。我最近建立了其中一個作爲LEON3單週期乘數的替代品:) – ArjunShankar

0

您所描述的是將帶符號的二進制整數轉換爲帶有十進制數字的可讀字符串的最典型方法。

但是,這不是唯一的方法。您可以先將2的補碼負3位值111轉換爲「7」,然後從中減去「8」併到達「-1」。

+0

感謝@alex :) – user1466594

+3

請記住,upvote並接受有用的答案。 –