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 결과
'JAVA > 실습' 카테고리의 다른 글
[java][실습] 006 이차원 배열에서 좌표에 X 찍기 (0) | 2020.07.05 |
---|---|
[java][실습] 005 오름차순, 내림차순으로 배열요소 정렬 (0) | 2020.07.05 |
[java][실습] 004 배열 섞기 (0) | 2020.07.05 |
[java][실습] 003 배열에서 최대값과 최소값 찾기 (0) | 2020.07.05 |
[java][실습] 002 별 찍기(삼각형, 역삼각형, 반삼각형, 육각형) (0) | 2020.07.02 |