我遇到了一個令人困惑的情況。我有這個簡單的加法我的代碼裏面:uint32_t有28位而不是32位
temp = thi + t2lo;
我已經定義thi
和t2lo
在我的代碼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:我有一個大的代碼,我不能把我的整個源代碼放在這裏爲你們重現這種情況。此外,這種情況只發生在某些輸入和大部分時間我的代碼工作正確。我只是想和你們覈對一下,如果你之前遇到過這樣的事情。 任何幫助將不勝感激。
不要把_all_你的代碼放在這裏,只是寫一個小例子來說明問題。如果你不能,如果問題在你刪除剩下的代碼時就消失了,那麼這可能是由於其他代碼中的某些內容引起的,我們很難猜測它是什麼。 –
擁有28bit:調試器可能只是省略前導零。 – MikeCAT
當我用十進制打印10時,它僅以「10」出現。哦,不,這意味着'int's只能容納99個數字! – immibis