2014-03-05 54 views
3

例如,在2和1的補碼中,INT_MAX * -1是一個有效數字。這是有保證的嗎?還有其他保證嗎?例如,INT_MIN可以在任何體系結構上爲-1或0?有什麼我們可以知道的(INT_MAX + INT_MIN)?我們是否可以知道(INT_MAX + INT_MIN)不會導致未定義的行爲?C標準是否對INT_MIN和INT_MAX之間的關係做出了保證?

+0

由於最小值和最大值的符號相反(見附錄E),所以它們的總和肯定是可表示的。附件E還說'INT_MIN'不能爲-1,因爲它必須至多是-32767。 –

+0

INT_MIN必須小於或等於-32767。所以不,它不能是-1或0。 –

回答

1

你保證INT_MIN最多-32767和INT_MAX至少32767

所以INT_MAX-1始終是有效的int。

INT_MAX + INT_MIN然後也總是被定義。

3

INT_MAX + INT_MIN總是被定義的,因爲添加兩個相反符號的數字永遠不會溢出。

爲了儘可能準確地回答您的問題,C標準規定了2的補碼,1的補碼或符號幅度表示。 (C11 6.2.6.2:2)。 int類型可能有填充位,但符號和值位在任何情況下都用於表示對稱或幾乎對稱的數字集。根據平臺是否使用2的補碼,總是有INT_MIN == - INT_MAX - 1INT_MIN == - INT_MAX

並且當然INT_MAX至少是32767,對應於值和符號位的最小值16位。

相關問題