큐범
Just do debug
큐범
전체 방문자
오늘
어제
  • 전체보기 (128)
    • 회고 (4)
    • JAVA (16)
      • JAVA 기초 (18)
      • JAVA Algorithm, Datastruct (13)
    • Spring (11)
    • Micro Service Architecture (3)
    • JPA (6)
    • gRPC (4)
    • Network (8)
    • Process (7)
    • Cloud (4)
    • Python (10)
    • Web(vue) (2)
    • UMC (1)
    • DB (9)
    • CS (1)
    • Clean Code (1)
    • TDD (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
큐범

Just do debug

JAVA/JAVA 기초

[JAVA 기초] 쉬프트 연산자(shift operator)

2021. 7. 16. 09:31

쉬프트 연산자 (<< >>)는 피 연산자의 각 자리를 오른쪽(>>) 왼쪽(<<)으로 이동 한다고 해서 쉬프트 연산자(shift operator)라고 이름을 붙였다.

Ex) "8 << 2"

  1. 10진수 8은 2진수로 '00001000'이다.
  1. 8<<2은 10진수 8의 2진수를 왼쪽으로 2자리 이동시킨다. '(00)001000'
  1. 자리이동으로 인한 저장범위를 벗어난 값은 버려지고, 빈자리는 0으로 채워진다.
    • 음수인 경우 1로 채워지고 양수인 경우 0으로 채워진다.
  1. '8<<2'의 결과는 2진수 '00100000' (10진수 32)가 된다.
private static String toBinaryString(int x) {
		String zero = "00000000000000000000000000000000";
		String temp = zero + Integer.toBinaryString(x);
		return temp.substring(temp.length()-32);
	}
	
	public static void main(String[] args) {
		int dec = 8;
		
		System.out.printf("%d >> %d = %4d \t%s%n", 
				dec, 0, dec >> 0, toBinaryString(dec >> 0));
		System.out.printf("%d >> %d = %4d \t%s%n", 
				dec, 1, dec >> 1, toBinaryString(dec >> 1));
		System.out.printf("%d >> %d = %4d \t%s%n", 
				dec, 2, dec >> 2, toBinaryString(dec >> 2));
	
		System.out.printf("%d << %d = %4d \t%s%n", 
				dec, 0, dec << 0, toBinaryString(dec << 0));
		System.out.printf("%d << %d = %4d \t%s%n", 
				dec, 1, dec << 1, toBinaryString(dec << 1));
		System.out.printf("%d << %d = %4d \t%s%n", 
				dec, 2, dec << 2, toBinaryString(dec << 2));
		System.out.println();
		
		dec=-8;
		
		System.out.printf("%d >> %d = %4d \t%s%n", 
				dec, 0, dec >> 0, toBinaryString(dec >> 0));
		System.out.printf("%d >> %d = %4d \t%s%n", 
				dec, 1, dec >> 1, toBinaryString(dec >> 1));
		System.out.printf("%d >> %d = %4d \t%s%n", 
				dec, 2, dec >> 2, toBinaryString(dec >> 2));
	
		System.out.printf("%d << %d = %4d \t%s%n", 
				dec, 0, dec << 0, toBinaryString(dec << 0));
		System.out.printf("%d << %d = %4d \t%s%n", 
				dec, 1, dec << 1, toBinaryString(dec << 1));
		System.out.printf("%d << %d = %4d \t%s%n", 
				dec, 2, dec << 2, toBinaryString(dec << 2));
		System.out.println();
		
		dec = 8;
		System.out.printf("%d >> %2d = %4d \t%s%n", 
				dec, 0, dec >> 0, toBinaryString(dec >> 0));
		System.out.printf("%d >> %2d = %4d \t%s%n", 
				dec, 32, dec >> 32, toBinaryString(dec >> 32));
	}

//결과
8 >> 0 =    8 	00000000000000000000000000001000
8 >> 1 =    4 	00000000000000000000000000000100
8 >> 2 =    2 	00000000000000000000000000000010
8 << 0 =    8 	00000000000000000000000000001000
8 << 1 =   16 	00000000000000000000000000010000
8 << 2 =   32 	00000000000000000000000000100000

-8 >> 0 =   -8 	11111111111111111111111111111000
-8 >> 1 =   -4 	11111111111111111111111111111100
-8 >> 2 =   -2 	11111111111111111111111111111110
-8 << 0 =   -8 	11111111111111111111111111111000
-8 << 1 =  -16 	11111111111111111111111111110000
-8 << 2 =  -32 	11111111111111111111111111100000

8 >>  0 =    8 	00000000000000000000000000001000
8 >> 32 =    8 	00000000000000000000000000001000

이해를 위해 값이 바뀌는 것을 확인해야한다.

public static void main(String[] args) {
		int dec = 1234;
		int hex = 0xABCD;
		int mask = 0xF;
		
		System.out.printf("hex=%X%n", hex);
		System.out.printf("%X%n", hex & mask);
		
		hex = hex >>4;
		System.out.printf("%X%n", hex & mask);
		
		hex = hex >>4;
		System.out.printf("%X%n", hex & mask);
		
		hex = hex >>4;
		System.out.printf("%X%n", hex & mask);
	}
//결과
hex=ABCD
D
C
B
A

출처 : JAVA의 정석 - (남궁성지음)

    'JAVA/JAVA 기초' 카테고리의 다른 글
    • [JAVA 기초] 조건문 (if-else, 중첩if)
    • [JAVA 기초] 조건, 대입 연산자
    • [JAVA 기초] 비트 전환 연산자
    • [JAVA 기초] 논리 부정 연산자(true, false)
    큐범
    큐범

    티스토리툴바