Подтвердить что ты не робот

Эквивалент оператора тройного сдвига Java (>>>) в С#?

Что такое эквивалент (в С#) оператора Java >>>?

(Чтобы уточнить, я не имею в виду операторы >> и <<.)

4b9b3361

Ответ 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 и т.д.

Вот пример.

    private long getUnsignedRightShift(long value,int s)
    {
        return (long)((ulong)value >> s);
    }