我正在处理一些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#等效项是什么?因为我认为这是发生运行时错误的主要问题

注意:当执行接近62,63,64时,我正在使用64X操作系统和,然后(1 <

最佳答案



否。Convert.ToUInt64((1 << (j % 64))转换转换结果,而不转换参数。



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

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

关于c# - C#中C++ 1i64移位的等效性是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31218570/

10-11 15:10