我真的不明白下面的代码发生了什么。为什么 t3
为零?
uint64_t t1 = MAXDWORD; // t1 contains 4294967295 - CORRECT
uint64_t t2 = t1 + 1; // t2 contains 4294967296 - CORRECT
uint64_t t3 = MAXDWORD + 1; // t3 contains 0 (zero) - HUH??
最佳答案
decltype(MAXDWORD)
是比 uint64_t
更窄的类型。因此表达式 MAXDWORD + 1
也不是 uint64_t
,并且在赋值给 unsigned
之前观察到 t3
环绕行为。t1 + 1
使用 unsigned
类型在 uint64_t
算法中执行,该类型更宽。
关于c++ - uint64_t t3 = MAXDWORD + 1 == 0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53152486/