我遇到了一个令人困惑的情况。我的代码中有这个简单的补充:
temp = thi + t2lo;
我在我的代码中定义了thi
and t2lo
as :uint32_t
temp
uint64_t
uint32_t thi, tlo, t2hi, t2lo;
uint64_t temp = 0;
我的代码不能正常工作,所以我使用 gdb 来找出问题所在。当我尝试在 gdb 中打印变量时,我得到了:
(gdb) p/x temp
$1 = 0xfeffff2
(gdb) p/x thi
$2 = 0xff00000
(gdb) p/x t2lo
$3 = 0xfffffff2
正如你在这里看到的,thi
有 28 位而不是 32 位,加法结果是完全错误的。谁能告诉我这里发生了什么?
PS:我有一个大代码,我不能把我的整个源代码放在这里让你们重现这种情况。此外,这种情况只发生在某些输入上,而且我的代码大部分时间都是正确的。我只是想和你们核实一下,如果你们以前遇到过这样的事情。任何帮助将不胜感激。