Что такое эквивалент (в С#) оператора Java >>>
?
(Чтобы уточнить, я не имею в виду операторы >>
и <<
.)
Что такое эквивалент (в С#) оператора Java >>>
?
(Чтобы уточнить, я не имею в виду операторы >>
и <<
.)
В С# вы можете использовать неподписанные целые типы, а затем <<
и >>
делать то, что вы ожидаете. документация MSDN о операторах смены дает вам подробную информацию.
Так как Java не поддерживает целые числа без знака (кроме char
), этот дополнительный оператор стал необходимым.
Java не имеет беззнакового сдвига влево (<<<
), но в любом случае вы можете просто отбросить его на uint
и shfit.
например.
(int)((uint)foo >> 2); // temporarily cast to uint, shift, then cast back to int
После прочтения этого, я надеюсь, что мой вывод о пользе следующим образом верен. Если нет, понимание будет оценено.
Java
i >>>= 1;
С#:
i = (int)((uint)i >> 1);
n → > s в Java эквивалентно TripleShift (n, s), где:
private static long TripleShift(long n, int s)
{
if (n >= 0)
return n >> s;
return (n >> s) + (2 << ~s);
}
Для моих VB.Net людей
Предлагаемые ответы выше дадут вам исключения переполнения с помощью Option Strict ON
Попробуйте это, например, -100 >>> 2
с приведенными выше решениями:
Следующий код всегда работает для >>>
Function RShift3(ByVal a As Long, ByVal n As Integer) As Long
If a >= 0 Then
Return a >> n
Else
Return (a >> n) + (2 << (Not n))
End If
End Function
В С# нет оператора → > . Но вы можете преобразовать свое значение как int, long, Int16, Int32, Int64 в unsigned uint, ulong, UInt16, UInt32, UInt64 и т.д.
Вот пример.
private long getUnsignedRightShift(long value,int s)
{
return (long)((ulong)value >> s);
}