我很清楚How big can a 64bit signed integer be? 感谢这个问题及其直截了当的答案。
那么,据此,我可以说 unsigned int
可以是 2^64 - 1,而不是 2^63 - 1 吗?
2^63 - 1: 0111111111111111111111111111111111111111111111111111111111111111
2^64 - 1: 1111111111111111111111111111111111111111111111111111111111111111
当且仅当我正确理解时,我如何才能检测到无符号溢出?二进制补码表示中有符号整数的溢出会侵入最高位,返回负数。但是这个未签名的案子怎么样?
最佳答案
有符号整数只能达到2^63-1
(9,223,372,036,854,775,807),因为最高有效位是为符号保留的。如果此位为 1
,则数字为负数,并且可以低至 -2^63
(-9,223,372,036,854,775,808)。
在一个带符号的 64 位整数上,2^64-1
实际上是数字 -1
。
但是,如果您使用无符号整数,则该值从 0
和 2^64-1
(18,446,744,073,709,551,615) 开始成为它的最大值,但无符号整数不能表示负值.
关于c - 64 位无符号整数可以有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46442411/