整型的賦值

來源:互聯網
上載者:User

對象的類型決定對象的取值。這會引起一個疑問:當我們試著把一個超出其取值範圍的值賦給一個指定類型的對象時,結果會怎樣呢?答案取決於這種類型是 signed
還是 unsigned
的。

對於 unsigned
類型來說,編譯器必須調整越界值使其滿足要求。編譯器會將該值對 unsigned
類型的可能取值數目求模,然後取所得值。比如 8
位的unsigned char
,其取值範圍從 0
到 255
(包括 255
)。如果賦給超出這個範圍的值,那麼編譯器將會取該值對 256
求模後的值。例如,如果試圖將 336
儲存到 8
位的 unsigned char
中,則實際賦值為 80
,因為 80
是 336
對 256
求模後的值。

對於 unsigned
類型來說,負數總是超出其取值範圍。unsigned
類型的對象可能永遠不會儲存負數。有些語言中將負數賦給 unsigned
類型是非法的,但在 C++
中這是合法的。C++
中,把負值賦給 unsigned
對象是完全合法的,其結果是該負數對該類型的取值個數求模後的值。所以,如果把 -1
賦給8
位的 unsigned char
,那麼結果是 255
,因為 255
是 -1
對256
求模後的值。當將超過取值範圍的值賦給 signed
類型時,由編譯器決定實際賦的值。在實際操作中,很多的編譯器處理 signed
類型的方式和 unsigned
類型類似。也就是說,賦值時是取該值對該類型取值數目求模後的值。然而我們不能保證編譯器都會這樣處理 signed
類型。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.