我很难将C++的这一部分移植到C#中。我不断收到运算符(operator)'||'不能应用于有意义的'long'和'long'类型的操作数。那等价的是什么呢?
while ((c <= combinations) && ((round_set & (1 << cList[c].one)) || (round_set & (1 << cList[c].two)) || (cUsed[c])))
{
fprintf( stdout, "C: %d\n", c);
c++;
}
while ((c <= combinations) && ((round_set & (1 << cList[c].one)) || (round_set & (1 << cList[c].two)) || (cUsed[c])))
{
Console.WriteLine("C: {0}", c);
c++;
}
最佳答案
与C#不同,C++让您将整数值视为 bool(boolean) 值即席,即整数0
为false,除0
以外的任何整数为true。 C#不允许这样做。
为了在C#中达到相同的效果,您必须明确地执行我刚刚描述的检查,因此,与其
if( (expr) || ... ) { }
你要
if( (expr) != 0 || ... ) { }
实际上,后者在C++中仍然是完全可以接受的(有时为了清晰起见有时会受到鼓励)。
关于c# - C++代码片段转换为C#按位运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7073691/