Shift Funktion

zerwi

Mitglied
Hallo,

es gibt in Java ja den Shift Operator:

aus 00001111 >> 2 wird 00000011

Was ich aber bräuchte wäre, wenn aus

00001111 >> 2 11000011 werden würde.

Gibts da von Java etwas ?

Vielen Dank schon mal.

mfg
zerwi
 
Hi.

Soweit mir bekannt ist, gibt es einen solchen rotierenden Shift-Operator in Java nicht.

Du mußt also manuell die herausgeschobenen Bits wieder auf der anderen Seite hinzufügen.

Gruß
 
Hallo,

ich denke was du suchst heißt circular shift / periodic shift / bit rotation:
Rotate no carry:
http://en.wikipedia.org/wiki/Bitwise_operation
http://en.wikipedia.org/wiki/Circular_shift

schau mal hier:
Java:
package de.tutorials;

public class CircularBitShift {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int a = 15;
		System.out.println(Integer.toBinaryString(a));
		System.out.println(Integer.toBinaryString(rotateLeft(a,4)));
		System.out.println(Integer.toBinaryString(rotateLeft(a,8)));
		System.out.println(Integer.toBinaryString(rotateLeft(a,16)));
		System.out.println(Integer.toBinaryString(rotateLeft(a,24)));
		System.out.println(Integer.toBinaryString(rotateLeft(a,30)));
		
		System.out.println(Integer.toBinaryString(rotateRight(a,2)));
		System.out.println(Integer.toBinaryString(rotateRight(a,4)));
		
		System.out.println(Integer.toBinaryString(rotateRight(a,32)));
	}

	static int rotateLeft(int value, int shift) {
	    shift &= 31;
	    return (value << shift) | (value >> (32 - shift));
	}

	static int rotateRight(int value, int shift) {
	    shift &= 31;
	    return (value >> shift) | (value << (32 - shift));
	}
}

Ausgabe:
Code:
1111
11110000
111100000000
11110000000000000000
1111000000000000000000000000
11000000000000000000000000000011
11000000000000000000000000000011
11110000000000000000000000000000
1111

Gruß Tom
 
Zurück