2016-09-29 117 views
-1

我計算出可以存儲在int數據類型中的可能數字的二進制補碼範圍是+32767到-32768,比我在CodeBlocks上進行的並給出了一個int值大於32767的 , !

我知道,如果你給一個數組比更多的值聲明它將需要更多
位比它應該從而摧毀另一個變量。

我的問題是當我給一個數據類型的值超出其
二進制補碼範圍時,會發生同樣的事情嗎?如果不是,會發生什麼......二進制補碼範圍在c

+0

沒有任何反應。很可能你的數據類型「int」實際上是32位大小。嘗試打印'sizeof(int)'並查看。當你聲明一個int時,你佔用*四個*字節。如果您正在分配相信整數大小爲兩個字節的內存結構,則可能需要小心。 – LSerni

回答

0

最小值大小爲int是16位,它可以容納-32,768到+32,767。它的實際大小因操作系統而異,從編譯器到編譯器。 ISO C標準要求int s能夠保持至少-32,767至+32,767,但不限於這些值。

它允許更大,並且適用於任何現代的32位或64位操作系統。 20年前的16位DOS中,你會看到16位的int,但在任何現代操作系統中,它通常都是32位。

如果溢出signed int行爲是未定義的。理論上,編譯器可以做任何事情,因爲符合C程序不應該觸發溢出。在實踐中,價值通常會從正面到負面,反之亦然。

溢出unsigned int s是明確的。值保證包裝。如果unsigned int是16位然後65535U + 1U == 0U。如果它大於16位,那麼65535U + 1U == 65536U(不溢出)。

+0

這是什麼意思*最小尺寸*? – RedBelly