2009-07-24 4 views
2

я некоторый код, написанный в VB, который звучит следующим образом:Как вы возвращаете 'not uint' в C#?

Return (Not (crc32Result)) 

Я пытаюсь преобразовать его в C#, и это то, что у меня есть:

return (!(crc32Result)); 

Однако я получаю ошибку компиляции :

Compiler Error Message: CS0023: Operator '!' cannot be applied to operand of type 'uint'

Есть ли другой оператор, который я должен использовать вместо этого?

Спасибо!

ответ

15

Похоже на то, что вы пытаетесь сделать, это обратить вспять бит crc32result. Если это так, вам нужен оператор тильды ~.

return (~crc32Result); 

Ссылка this question.

+2

Быстрое объяснение было бы полезно ... в VB.NET, не может использоваться как побитовый оператор. В этом случае он выполняет отрицание (переворачивание или изменение битов). Ответ дает C# equivilant. –

+0

Спасибо, Джастин. Это полезно. –

3

В C#, челка (!) Используется, чтобы перевернуть логическую переменную. Вы пытаетесь обработать uInt выше как логическое или выполнить другое изменение (возможно, изменение всех двоичных цифр)?

Я хотел бы предложить один из них является решением, которое вы ищете:

return (!(bool)crc32Result); // treating as bool (0 = false, anything else is true) 

return (~crc32Result); //bitwise flipping for all 
3

Попробуйте это:

return crc32Result == 0; 

Или быть немного яснее на то, что я делаю:

return !(crc32Result != 0); 

Что второй пример делает преобразовать его в булево принципалом «0 ложно, ненулевая правда». Поэтому, если он не равен нулю, он вернет true. И затем я использую '!' оператора для выполнения операции «нет». Код Visual Basic, который вы дали, по-видимому, делает первую часть неявно (как и C/C++), но C# и Java не будут.

Но это, если и ТОЛЬКО, если вы ищете логический тип возврата из функции. Если вы делаете побитовую инверсию, то вам необходимо следующее:

return (~crc32Result); 

В этом случае, «~» оператор выполняет преобразование в других двоичных разрядах.