shift를 이용하는 다양한 예제다.

 

TestShift01

32bit(8byte)로 표현한 8의 left shift와 right shift를 알아본다.

여기서 Integer.toBinaryString은 Integer 클래스에 있는 메서드고

String을 반환하는 toBinaryString은 TestShift01 클래스에서 정의한 메서드다.

public class TestShift01 {

	static String toBinaryString(int x) {
		String zero = "00000000000000000000000000000000"; // 32개(32bit표현)
		String tmp = zero + Integer.toBinaryString(x);
		
        // 매개변수 x로 받은 값을 2진법으로 표기한 것을 zero에 붙이고
        
		return tmp.substring(tmp.length()-32);
        
        // 붙인 문자열을 전체 길이 중 32를 뺀 곳에서 부터 자른다.
		
	} 
	public static void main(String[] args) {
		int dec = 8;
		
		System.out.printf("%d >> %d = %4d \t %s\n", dec, 2, dec >> 2, toBinaryString(dec >> 2));
        
        // 우측 시프트 2
        
		System.out.printf("%d << %d = %4d \t %s%n", dec, 1, dec << 1, toBinaryString(dec << 1));
        
        // 좌측 시프트 1
	}
}

TestShift01 결과

TestShift02

앞의 TestShift01에서 toBinaryString메서드를 이용해서

16진수 ABCD의 각 자리 숫자를 추출한다.

&연산은 둘 중 하나라도 0이면 0을 반환하는 논리연산자이므로 1과 &를 했을 때

1이면 1이 반환되고 0이면 0이 반환된다.

만약 00100110과 00001111을 & 하면 앞 4자리는 00001111의 0000떄문에 0이 되고

뒤 4 자리는 00001111의 1111때문에 0110이 된다.

public class TestShift02 {
	public static void main(String[] args) {
		int hex = 0xABCD; // 16진수로 ABCD
		int mask = 0xF; // 2진수로 표시하면 1111이 됨
		
		System.out.printf("hex = %s%n",TestShift01.toBinaryString(hex));
		System.out.printf("mask = %s%n",TestShift01.toBinaryString(mask));
		
        /* 각각 hex = 00000000000000001010101111001101 
       			 mask = 00000000000000000000000000001111로 출력됨 */
		
        // 첫 번째 글자
		System.out.printf("hex = %X%n", hex);
		System.out.printf("hex & mask = %X%n", hex & mask);
		
        hex = hex >> 4; // 우측으로 4비트 이동
        
        // 두 번째 글자
		System.out.printf("hex = %s%n",TestShift01.toBinaryString(hex));
		System.out.printf("hex & mask = %X%n", hex & mask);
		
		hex = hex >> 4; // 우측으로 4비트 이동
        
        // 세 번째 글자
		System.out.printf("hex = %s%n",TestShift01.toBinaryString(hex));
		System.out.printf("hex & mask = %X%n", hex & mask);

		hex = hex >> 4; // 우측으로 4비트 이동
        
        // 네 번째 글자
		System.out.printf("hex = %s%n",TestShift01.toBinaryString(hex));
		System.out.printf("hex & mask = %X%n", hex & mask);
				
	}
}

TestShift02 결과

 

 

 

 

 

 

+ Recent posts