我很难将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/

10-11 23:23