【发布时间】:2017-09-27 07:57:16
【问题描述】:
我很清楚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^64 - 1。 -
它与检测带符号数溢出没有本质区别。你会得到一个小整数,而不是一个负数。
-
无符号整数不会溢出;他们环绕。
-
查看这里的讨论:stackoverflow.com/questions/3944505/… 最好的方法可能是使用 CPU 的溢出标志(但这些标志并未以标准方式公开,因此您需要使用 gcc 编译器宏或类似的东西)。
-
"64 位无符号整数可以有多大?"它可以是 64 位... 对于任何二进制(以 2 为基数)数字,数字数字
n的值是val * 2^n,其中val是二进制的 1 或 0。请注意,lsb 为 n=0。因此,只有 msb 设置为 1 的数字将是2^63,而设置为“全一”的 64 位数字将是2^64 - 1。在你被允许参加任何编程课程之前,这是他们在(体面的)学校教的完全基本的东西。
标签: c