C# 中 C++ 1i64 移位的等效项是什么

what is the equivalence of C++ 1i64 Shifting in C#

我正在编写一些 C++ 代码,我需要将其翻译成 C#,在原始代码中有这一行:

if(!(Bchild[j>>6] & (1i64 << (j % 64))))

其中 j 是小于 10000 的数字。Bchild 是一个 UInt64

在 C# 中,我找不到任何与 1i64 等效的东西,但是我即兴创作,我认为可以像这样重写代码:

if ((Bchild[j >> 6] & Convert.ToUInt64((1 << (j % 64)))) == 0)

现在我收到一个错误:值太大或太小。我的第一部分问题是:我做得对吗?如果是这样,那么: 1i64 的 C# 等价物是什么?因为我认为这是出现此运行时错误的主要问题

注意:我在 64X 操作系统上工作,当执行接近 62、63、64 时,然后 (1 << (j % 64))) 给出这样的数字:9223372036854775808

Am I doing it right ?

没有。 Convert.ToUInt64((1 << (j % 64)) 转换 移位的结果 ,而不是参数。

what is the C# equivalent for 1i64

您可以使用 1L 代替 1i64,或 1UL 代替 1ui64

顺便说一句,请注意,在某些情况下,C++ 中有符号整数的左移是未定义的行为。 (根据最新标准,您的具体情况是可以的,假设 1i64 << 63 可以用相应的无符号类型表示。)