簡體   English   中英

UINT_MAX + 1等於什么?

[英]UINT_MAX + 1 equals what?

對於UINT_MAX + 1u ,C中定義的行為是什么? 假設它為零是多么安全?

從標准(C11,6.2.5 / 9,強調我的):

[...]涉及無符號操作數的計算永遠不會溢出,因為無法由結果無符號整數類型表示的結果以比模式結果類型可以表示的最大值大1的數量減少

如果UINT_MAX10

(10 + 1) % (10 + 1) == 0

所以,是的,假設它為零是安全的。

值得強調的是,雖然無符號行為是明確定義的,但有符號整數溢出不是:

在C編程語言中,帶符號的整數溢出會導致未定義的行為,而無符號整數溢出會導致數量減少,模數為2

關於這個主題的一篇非常好的論文:

C / C ++整數運算的例子及其結果

Expression             Result
----------             ------
UINT_MAX+1             0
LONG_MAX+1             undefined
INT_MAX+1              undefined
SHRT_MAX+1             SHRT_MAX+1 if INT_MAX>SHRT_MAX, otherwise undefined
char c = CHAR_MAX; c++ varies
-INT_MIN               undefined
(char)INT_MAX          commonly -1
1<<-1                  undefined
1<<0                   1
1<<31                  commonly INT_MIN in ANSI C and C++98; undefined in C99 and C++11
1<<32                  undefined
1/0                    undefined
INT_MIN%-1             undefined in C11, otherwise undefined in practice

它是安全的。 C標准保證無符號整數溢出環繞結果為零。

應該是安全的:

Wiki上無符號溢出

注意unsigned int overflow定義良好。

此外,這是一個完整的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM