困った事態に遭遇しました。コード内に次の簡単な追加があります。
temp = thi + t2lo;
私は自分のコードで and thi
ast2lo
を定義しました: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
には 32 ビットではなく 28 ビットがあり、加算結果は完全に間違っています。ここで何が起こっているのか誰か教えてもらえますか?
PS:私は大きなコードを持っているので、この状況を再現するためにソース コード全体をここに置くことはできません。また、この状況は特定の入力に対してのみ発生し、ほとんどの場合、コードは正しく機能しています。以前にこのようなことに遭遇したかどうか、皆さんに確認したいだけです。どんな助けでも大歓迎です。