Unsigned und Signed Right Bit Shift Operator in Java
Dieses Tutorial informiert über vorzeichenbehaftete und vorzeichenlose Rechte-Bit-Verschiebungsoperatoren in Java. Es demonstriert auch ihre Verwendung anhand von Codebeispielen.
Unsigned und Signed Right Bit Shift Operator in Java
Im Gegensatz zu anderen Programmiersprachen unterstützt Java zwei rechte Bitverschiebungsoperatoren.
- Die vorzeichenbehaftete rechte Bitverschiebung, dargestellt durch das Symbol
>>
. - Die vorzeichenlose rechte Bitverschiebung, dargestellt durch das Symbol
>>>
.
Beachten Sie, dass andere Programmiersprachen wie C, C++ usw. nur den Vorzeichen-Rechts-Bitverschiebungsoperator (>>
) enthalten, Java jedoch die Verwendung von vorzeichenbehafteten und vorzeichenlosen Verschiebungsoperationen erlaubt.
Unterschied zwischen vorzeichenbehaftetem und vorzeichenlosem rechten Bitverschiebungsoperator
Die Verschiebung nach rechts mit Vorzeichen (>>
) verschiebt jedes Bit einer Zahl nach rechts und behält das Vorzeichenbit (Bit ganz links) bei. Das Vorzeichenbit wird verwendet, um das Vorzeichen der Zahl zu reservieren. Die Zahl wäre positiv oder negativ, wenn das Vorzeichenbit 0
bzw. 1
ist.
Andererseits führt die vorzeichenlose Rechtsverschiebung (>>>
) auch eine ähnliche Operation wie die vorzeichenbehaftete Rechtsverschiebung aus, aber der Unterschied besteht darin, dass die vorzeichenlose Rechtsverschiebung immer die Position ganz links mit der 0
als Wert füllt nicht unterschrieben.
Wenn Sie die Verschiebung nach rechts ohne Vorzeichen auf eine positive Zahl anwenden, wird dasselbe Ergebnis wie die Verschiebung nach rechts mit Vorzeichen angezeigt, aber wenn Sie die negative Zahl angeben, ist das Ergebnis positiv, da alle vorzeichenbehafteten Bits durch 0
ersetzt werden.
Beispiel für Bitverschiebungsoperator mit Vorzeichen nach rechts (>>
):
Let's take a number -11, and we will shift 2 bits towards the right.
+11 in 8-bit form = 0000 1011
1's Complement = 1111 0100
2's Compelement = +1
-----------------------------
2's Complement of -11 = 1111 0101
n = -11 = 1111 0101
Shift 1st bit = 1111 1010
Shift 2nd bit = 1111 1101
1111 1101
-1
------------------------------
1111 1100 = 1's Complement
0000 0011 = Complement of each bit
So -11 >> 2 = -3 which is in binary 0000 0011.
Beispiel für vorzeichenlosen Bitverschiebungsoperator nach rechts (>>>
):
n = 10 = 0000 1010 //the leftmost bit position is filled with '0' as 'n' is positive
Now Shift the '3' bits towards the right; you can do it directly, but let's go one-by-one
n = 0000 1010
Shift 1st bit = 0000 0101
Shift 2nd bit = 0000 0010
Shift 3rd bit = 0000 0001
So, n >>> 3 = 0000 0001 which would be 1 in decimals.
We can also use this formula:(Given decimal number/2^n)
Where 'n' is the required number of shifts, in our case, it is '3'.
So, n >>> 3 = 10/2^3 = 10/8 = 1
Denken Sie daran, dass alle verschobenen Bits in beiden Fällen verloren gehen (vorzeichenbehaftete und vorzeichenlose Rechtsverschiebung).
Verwendung von Signed Right Bit Shift (>>
) in Java
Wir haben im folgenden Beispiel eine vorzeichenbehaftete rechte Bitverschiebungsoperation an einer Zahl durchgeführt.
Beispielcode:
public class SignedRightShift {
public static void main(String args[]) {
int a = -11;
System.out.println(a >> 2);
int b = 4;
System.out.println(b >> 1);
}
}
Ausgang:
-3
2
Verwendung von Bitverschiebung ohne Vorzeichen (>>>
) in Java
Das folgende Beispiel veranschaulicht eine Bitverschiebungsoperation ohne Vorzeichen nach rechts an einer Zahl.
Beispielcode:
public class UnsignedRightShift {
public static void main(String args[]) {
// The binary representation of -1 is all "111..1".
int a = -1;
// The binary value of 'a >>> 29' is "00...0111"
System.out.println(a >>> 29);
// The binary value of 'a >>> 30' is "00...0011"
System.out.println(a >>> 30);
// The value of 'a >>> 31' is "00...0001"
System.out.println(a >>> 31);
}
}
Ausgang:
7
3
1
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn