Эквивалент оператора тройного сдвига Java (>>>) в С#?
Что такое эквивалент (в С#) оператора Java >>>?
(Чтобы уточнить, я не имею в виду операторы >> и <<.)
Ответ 1
В С# вы можете использовать неподписанные целые типы, а затем << и >> делать то, что вы ожидаете. документация MSDN о операторах смены дает вам подробную информацию.
Так как Java не поддерживает целые числа без знака (кроме char), этот дополнительный оператор стал необходимым.
Ответ 2
Java не имеет беззнакового сдвига влево (<<<), но в любом случае вы можете просто отбросить его на uint и shfit.
например.
(int)((uint)foo >> 2); // temporarily cast to uint, shift, then cast back to int
Ответ 3
После прочтения этого, я надеюсь, что мой вывод о пользе следующим образом верен.
Если нет, понимание будет оценено.
Java
i >>>= 1;
С#:
i = (int)((uint)i >> 1);
Ответ 4
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);
}
Ответ 5
Для моих 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
Ответ 6
В С# нет оператора → > . Но вы можете преобразовать свое значение как int, long, Int16, Int32, Int64 в unsigned uint, ulong, UInt16, UInt32, UInt64 и т.д.