Co to jest odpowiednik (w języku C#) operatora Javy >>>
?Odpowiednik operatora potrójnej zmiany Java (>>>) w języku C#?
(Właśnie w celu wyjaśnienia, nie jestem odnoszące się do operatorów >>
i <<
.)
Co to jest odpowiednik (w języku C#) operatora Javy >>>
?Odpowiednik operatora potrójnej zmiany Java (>>>) w języku C#?
(Właśnie w celu wyjaśnienia, nie jestem odnoszące się do operatorów >>
i <<
.)
W języku C#, można używać niepodpisanych typów całkowitych, a następnie <<
i >>
robić to, czego oczekują. MSDN documentation on shift operators podaje szczegóły.
Ponieważ Java nie obsługuje liczb całkowitych bez znaku (z wyjątkiem char
), ten dodatkowy operator stał się niezbędny.
wielkie dzięki za wejście – Nikolaos
Java nie ma niepodpisany lewy shift (<<<
), ale tak czy inaczej, można po prostu oddanych do uint
i shfit stamtąd.
E.g.
(int)((uint)foo >> 2); // temporarily cast to uint, shift, then cast back to int
Po przeczytaniu tego, mam nadzieję, że moja konkluzja użycia jest poprawna. Jeśli nie, wgląd został doceniony.
Java
i >>>= 1;
C#
i = (int)((uint)i >> 1);
n >>> s Java odpowiada TripleShift (n, y), gdzie:
private static long TripleShift(long n, int s)
{
if (n >= 0)
return n >> s;
return (n >> s) + (2 << ~s);
}
'(2 << s)' nie zadziała ... – Lucero
działa dla vb.net szczególnie –
Ze swej VB .Net ludzie
Sugerowane odpowiedzi powyżej da Ci przelewać wyjątki z Option Strict ON
Spróbuj na przykład -100 >>> 2
z powyższych rozwiązań:
Poniższy kod działa zawsze na >>>
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
@Sebastien Lebreton Nie widziałem twojego rozwiązania przed opublikowaniem tego –
Nie ma >>> operator w języku C#. Ale możesz przekonwertować swoją wartość, np. Int, long, Int16, Int32, Int64 na unsigned uint, ulong, UInt16, UInt32, UInt64 itd.
Oto przykład.
private long getUnsignedRightShift(long value,int s)
{
return (long)((ulong)value >> s);
}
Brak operatora <<< w Javie, tylko operator >>>. – Jesper