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
可以用相应的无符号类型表示。)
我正在编写一些 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
可以用相应的无符号类型表示。)