在C#中等效的Java三班制运算符(>>>)?

时间:2009-12-10 10:50:19

标签: c# java bitwise-operators

Java >>>运算符的等价物(在C#中)是什么?

(只是为了澄清,我不是指>><<运营商。)

6 个答案:

答案 0 :(得分:30)

在C#中,您可以使用无符号整数类型,然后<<>>执行您期望的操作。 MSDN documentation on shift operators为您提供详细信息。

由于Java不支持无符号整数(除char之外),因此需要使用这个附加运算符。

答案 1 :(得分:13)

Java没有无符号左移(<<<),但无论哪种方式,你都可以转换为uint并从那里进行shfit。

E.g。

(int)((uint)foo >> 2); // temporarily cast to uint, shift, then cast back to int

答案 2 :(得分:2)

阅读本文后,我希望我的使用结论如下是正确的。 如果没有,那么洞察力就会受到赞赏。

爪哇

i >>>= 1;

C#:

i = (int)((uint)i >> 1);

答案 3 :(得分:1)

n&gt;&gt;&gt; Java中的s相当于TripleShift(n,s),其中:

    private static long TripleShift(long n, int s)
    {
        if (n >= 0)
            return n >> s;
        return (n >> s) + (2 << ~s);
    }

答案 4 :(得分:1)

没有&gt;&gt;&gt; C#中的运算符。但是您可以将int,long,Int16,Int32,Int64等值转换为unsigned uint,ulong,UInt16,UInt32,UInt64等。

以下是示例。

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

答案 5 :(得分:0)

我的 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