c - 64 位无符号整数可以有多大?

标签 c

我很清楚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

但是,如果您使用无符号整数,则该值从 02^64-1 (18,446,744,073,709,551,615) 开始成为它的最大值,但无符号整数不能表示负值.

关于c - 64 位无符号整数可以有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46442411/

相关文章:

无法将变量分配给 C 中的外部变量

c - 将字符打印到文件会产生奇怪的结果

c++ - 如何计算指针数组内容的长度

c - 试图让这个 if 语句起作用,但我似乎无法将变量与数组中的另一个变量进行比较

c - pthread_self() 怎么总是成功?

c - 段错误 - GNU C

c - Linux C : what happens to unused file descriptors?

将缓冲区转换为 strtok 的 char 数组

c - 调用 Seg Fault 以销毁 malloced 结构

c - STM32上的ADC单次转换