2

这个问题可能很愚蠢或偏执,但无论如何:-)。给定以下代码:

DWORD hiRes;

// will overflow about once in an hour
hiRes = GetTickCount() * 1193L;

如果它知道hiRes周期性溢出并且这种情况得到妥善处理,那么这段代码有什么问题吗?

更新: 结果对我来说非常令人惊讶,因为答案取决于hiResC 标准定义的(有符号或无符号)类型(参见示例)。

4

2 回答 2

6

溢出unsigned int是安全的。溢出签名的不是(未定义的行为)。

MSDN说:

DWORD 是一个 32 位无符号整数(范围:0 到 4294967295 十进制)。该类型声明如下:

typedef unsigned long DWORD

所以应该是安全的。

于 2011-08-07T09:04:06.140 回答
1

无符号整数是安全的,有符号则不是。但我从来没有遇到过一个不做明显的双补的平台。我真希望标准人们咬紧牙关,让它成为强制性的。

于 2011-08-07T09:07:14.023 回答