【发布时间】:2019-11-24 10:39:09
【问题描述】:
如果 unsigned long 最大值为 4294967295,测试程序如何得出 4294967297?
#include <iostream>
using namespace std;
unsigned long millis_diff(unsigned long then, unsigned long now) {
return now < then ? now + then : now - then;
}
int main()
{
unsigned long now = 2;
unsigned long then = 4294967295; //unsigned long maximum value
unsigned long diff = millis_diff(then, now);
cout << diff;
return 0;
}
【问题讨论】:
-
"unsigned long 最大值为 4294967295" 这通常是不正确的前提。
-
C++ 为您提供整数类型的两个保证。首先是条件
sizeof(char) <= sizeof(short) && sizeof(short) <= sizeof(int) && sizeof(int) <= sizeof(long) && sizeof(long) <= sizeof(long long)将是true。第二个是long将是至少 32 位数据类型。long也可以是 64 位。 -
关于
unsigned long的唯一保证是它大于或等于unsigned int。实际大小由实现定义。 -
@EugeneX,整数大小表高度依赖于架构和 ABI。在所有平台上都不尽相同。
-
有些目标系统(通常是 DPS)
char可能是 16 位。在旧系统中,“字符”可以是 6、7 或 9 位,而“字”(通常是int)可以是 18 或 36 位。简而言之,整数类型在规范中没有固定大小,只有最小大小。请记住,即使char可以是任意位数,sizeof(char)将始终等于1,
标签: c++ integer overflow sizeof