2017-01-19 11 views
0

Я пытаюсь перевести Java код с логическим сдвигом вправо (>>>) (Difference between >>> and >>) на C#Что такое код для логического сдвига вправо в C#?

Java код

return hash >>> 24^hash & 0xFFFFFF; 

C# помечаются >>> как ошибка синтаксиса.

Как это исправить?

Update 1 Люди рекомендуют использовать >> в C#, но это не решило проблему.

System.out.println("hash 1 !!! = " + (-986417464>>>24)); 

является 197

но

Console.WriteLine("hash 1 !!! = " + (-986417464 >> 24)); 

является -59

Спасибо!

+0

Возможный дубликат (HTTP : //stackoverflow.com/questions/1880172/equivalent-of-java-triple-shift-operator-in-c) – Brian

+0

Также [Что такое эквивалент C# для беззнакового оператора Java >>>] (http: // stackoverflow.com/q/8125127/18192) – Brian

ответ

7

Java необходимо ввести >>>, потому что его только тип без знака является char, чьи операции выполняются в целых числах.

C#, с другой стороны, имеет беззнаковых типов, которые выполняют сдвиг вправо без расширения знака: [? Эквивалент Java тройного оператора сдвига (>>>) в C#]

uint h = (uint)hash; 
return h >> 24^h & 0xFFFFFF; 
+0

Нет, это не так. Например, System.out.println ("hash 2 !!! =" + (-986417464 >>> 24)); является 197 but Console.WriteLine ("hash 1 !!! =" + (-986417464 >> 24)); есть -59 –

+1

@ArthurKhusnutdinov Конечно, его 197, [посмотрите] (http://ideone.com/ZE8QFZ). – dasblinkenlight

+0

Но почему это не равно в моем примере Console.WriteLine ("hash 1 !!! =" + (-986417464 >> 24)); ? –

-2

Для C# вы можете просто использовать >>

См: https://msdn.microsoft.com/nl-nl/library/xt18et0d.aspx

+0

Нет, это не так. Например, System.out.println ("hash 2 !!! =" + (-986417464 >>> 24)); является 197 but Console.WriteLine ("hash 1 !!! =" + (-986417464 >> 24)); is -59 –

+0

Ответ dasblinkenlight показывает, как решить именно эту проблему. – Christiaan