Unsigned und Signed Right Bit Shift Operator in Java

MD Aminul Islam 12 Oktober 2023
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.

  1. Die vorzeichenbehaftete rechte Bitverschiebung, dargestellt durch das Symbol >>.
  2. 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
MD Aminul Islam avatar MD Aminul Islam avatar

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

Verwandter Artikel - Java Operator