2012-07-15 27 views
7

當一個整數超出該類型的範圍時,最大值+ 1被加/減(取決於數字範圍的哪一部分)。 例如,爲什麼C隱式轉換像他們一樣操作?

unsigned short num = 65537; 

NUM將具有1的值(65536中減去)。 我的問題是:爲什麼會發生? 我的直覺告訴我,它與進位標誌和溢出標誌有關,因爲最大值總是1111 ....

在此先感謝!

+4

它截斷... – Mehrdad 2012-07-15 08:33:19

+0

爲什麼你應該編譯基本上所有可能的警告啓用完美的例子。至於爲什麼這是在標準的,但....不知道:第。 (除非你的意思是1.這只是一個2的恭維溢出。) – Corbin 2012-07-15 08:35:14

+0

這樣的警告消息的例子:'警告:大整數隱式截斷爲無符號類型' – curiousguy 2012-07-23 11:00:24

回答

7

對於使用二進制補碼帶符號整數的規則轉化爲Ñ位無符號類型的機器相當於丟棄所有,但低位Ñ比特。對於典型的硬件,這是進行轉換的最簡單的方法。

該標準允許對已簽名整數的其他表示,但爲了保持一致性而使用相同的轉換規則。這可能需要在這些機器上做一些額外的工作,但是(a)這樣的機器是非常少見的,並且(b)無論如何,這些開支應該相當小。

相關問題