Фрагмент C ++ для C # побитовых операторов - PullRequest
2 голосов
/ 16 августа 2011

Мне трудно портировать эту часть C ++ на C #.Я продолжаю получать Оператор '||'не может применяться к операндам типа '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++;
                            }

1 Ответ

6 голосов
/ 16 августа 2011

C ++, в отличие от C #, позволяет обрабатывать целочисленное значение, как если бы оно было логическим значением, ad-hoc, где любое целое число 0 является ложным, а любое целое число, отличное от 0, является истинным.C # не допускает этого.

Чтобы добиться того же эффекта в C #, вы должны явно выполнить только что описанную проверку, поэтому вместо

if( (expr) || ... ) { }

вы хотите

if( (expr) != 0 || ... ) { }

И фактически последнее все еще совершенно приемлемо (и иногда поощряется для ясности) в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...