C#中C++1i64移位的等价性是什么

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

本文关键字:是什么 C++1i64      更新时间:2023-10-16

我正在编写一些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

我做得对吗?

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

1i64 的C#等价物是什么

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

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