带符号int的位移位重置过多

请看下面的代码片段,它基本上只是将 1 个字节向左移动 24 位。

uint64_t i = 0xFFFFFFFF00000000;
printf("before: %016llX n", i);
i += 0xFF << 24;
printf("after : %016llX n", i);

// gives:
// before: FFFFFFFF00000000
// after : FFFFFFFEFF000000

最重要的 32 位是FFFFFFFEE在最后观看)。这并不像我预期的那样。我不明白为什么左移 1 个字节 24 位会触及位 #32(位 #31 应该是最后一个修改的)它把最后一个F( 1111) 变成了E( 1110) 。

为了使其正常工作,我使用了0xFF无符号 ( 0xFFU)。

uint64_t i = 0xFFFFFFFF00000000;
printf("before: %016llX n", i);
i += 0xFFU << 24;
printf("after : %016llX n", i);

// gives:
// before: FFFFFFFF00000000
// after : FFFFFFFFFF000000

为什么带符号 int ( 0xFF) 的位移位会过多地触摸/重置一位?

以上是带符号int的位移位重置过多的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>