簽名與無符號整數

我是否正確地說有符號和無符號整數之間的區別是: 編程

  1. 無符號能夠保持較大的正值,而不是負值。
  2. 無符號使用前導位做爲值的一部分,而帶符號版本使用最左側位來標識數字是正數仍是負數。
  3. 有符號整數能夠包含正數和負數。

還有其餘差別嗎? 安全


#1樓

  1. 是的,無符號整數能夠存儲大值。
  2. 不,有不一樣的方式來顯示正面和負面的價值觀。
  3. 是的,有符號整數能夠包含正值和負值。

#2樓

在嵌入式系統上編程時,必須使用無符號整數。 在循環中,當不須要有符號整數時,使用無符號整數將節省設計此類系統所必需的安全性。 ui


#3樓

C中的有符號整數表示數字。 若是ab是有符號整數類型的變量,該標準將永遠不須要編譯器,這樣使得表達式a+=b店,變成a比它們各自的值的算術和其餘任何東西。 能夠確定的是,若是算術總和不適合a ,處理器可能沒法將其放在那裏,但標準不須要編譯器截斷或包裝值,或者作任何其餘事情,若是值爲超過其類型的限制。 請注意,雖然標準不要求它,但容許C實現使用有符號值捕獲算術溢出。 spa

C中的無符號整數表現爲整數的抽象代數環,除了涉及對較大類型的轉換或操做的場景外,它們是2的冪的一致模。 將任意大小的整數轉換爲32位無符號類型將產生對應於與整數mod 4,294,967,296一致的事物的成員。 從2中減去3獲得4,294,967,295的緣由是,將一些與3一致的東西添加到與4,294,967,295一致的東西將產生與2一致的東西。 設計

抽象代數環類型一般是方便的東西; 不幸的是,C使用簽名做爲一個類型是否應該表現爲環的決定因素。 更糟糕的是,無符號值在轉換爲較大類型時被視爲數字而不是環成員,而小於int無符號值在對它們執行任何算術時將轉換爲數字。 若是vuint32_t ,等於4,294,967,294 ,那麼v*=v; 應該使v=4 。 不幸的是,若是int是64位,那麼就不知道v*=v; 能作。 code

鑑於標準自己,我建議在須要與代數環相關聯的行爲的狀況下使用無符號類型,並在想要表示數字時使用簽名類型。 不幸的是,C以它的方式繪製了區別,但它們就是它們的本質。 編譯器


#4樓

他只詢問簽名和未簽名。 不知道爲何人們會在這裏添加額外的東西。 讓我告訴你答案。 編譯

  1. 無符號:它僅包含非負值,即0到255。 變量

  2. 簽名:它包含負值和正值,但格式不一樣 循環

    • 0到+127
    • -1到-128

這個解釋是關於8位數字系統。


#5樓

通常來講這是正確的。 在不知道爲何要尋找差別的狀況下,我沒法想到簽名和未簽名之間的任何其餘區別。

相關文章
相關標籤/搜索