【发布时间】:2021-08-18 11:20:14
【问题描述】:
代码:
var test1 = 1 & Int64.Parse("1") << 32; // 0
var test2 = 1 & Int32.Parse("1") << 32; // 1 <= It should be 0
【问题讨论】:
-
试试
1 & Int64.Parse("1") << 64;。它也会导致 1。我很确定它溢出了。 -
因为只有两行,所以我将您的代码添加为文本,OP。请始终将代码添加为文本(如有必要,请添加图片用于说明目的),否则我们无法调试它。
-
您期望什么结果,为什么?我在 cmets 中看到您希望
1作为 64 位的 LSB?如果将1向左移动 32 次然后屏蔽 LSB,64 位会发生什么? -
Here 是“教程”。
-
/* 1 after shift 32 bit = 00000000 00000000 00000000 00000000 * 32 bit/// operator & with 1/* 1 = 00000000 00000000 00000000 00000001 * 32 bit/我预计结果应该是 0。因为 1 在向左移动 32 位后变为 0。