elesis's haunt
[Java] 비트 연산자_시프트 연산 본문
비트 연산자
비트 단위(0, 1)로 연산합니다.
기능에 따라 비트 이동연산자, 비트 논리연산자로 나뉩니다.
1. 비트 이동연산자
연산식 | 설명 |
x << y | 정수 x의 각 비트를 y만큼 왼쪽으로 이동시킵니다. (빈자리는 0으로 채워집니다.) |
x >> y | 정수 x의 각 비트를 y만큼 오른쪽으로 이동시킵니다. (빈자리는 정수의 최상위 부호비트와 같은 값으로 채워집니다.) |
x >>> y | 정수 x의 각 비트를 y만큼 오른쪽으로 이동시킵니다. (빈자리는 0으로 채워집니다.) |
ex)
더보기
x << y
int calInt = 3; // 0011
byte calByte = 3; // 0011
// 왼쪽으로 3칸 이동
System.out.println(calInt<<2); // 1100 = 12
System.out.println(calByte<<2); // 12
System.out.println(3<<2); // 12
x >> y
int calInt = -20; // 10100 = 16+4 = 20
byte calByte = -20; // 101100 = -32+8+4 = -20, +20의 보수(1100)에 맨앞 음수표시를(1) 달면 음수변환.
// 오른쪽으로 2칸 이동
System.out.println(calInt>>2); // 1011 = -8+2+1 = -5
System.out.println(calByte>>2); // -5
System.out.println(-20>>2); // -5
x >>> y
int calInt = -20; // 00000000 00000000 00000000 00010100 = 20을 32비트(int)로 분해한 다음
byte calByte = -20; // 11111111 11111111 11111111 11101100 = -20으로 음수전환
// 오른쪽으로 2칸 이동
System.out.println(calInt>>>2); // 00111111 11111111 11111111 11111011 = 1073741819
System.out.println(calByte>>>2); // 1073741819
System.out.println(-20>>>2); // 1073741819
* int는 32bit지만 맨앞 비트는 부호 역할을 하므로 양수는 0, 음수는 1, 최소값은 -2^31, 최대값은 2^31-1 입니다.
* 32비트로 분해를 마지막 예제에서만 했는데 앞의 두 예제도 다 합니다. 다 볼 필요가 없어서 생략했습니다.
2. 비트 논리연산자
연산자 | 논리 | 설명 |
& | AND(논리곱) | 두 비트 모두 1일 경우 연산결과 1 |
| | OR(논리합) | 두 비트 중 하나라도 1일 경우 연산결과 1 |
^ | XOR(배타적 논리합) | 두 비트중 하나는 1이고 다른하나가 0일 경우 연산결과 1 |
~ | NOT(논리 부정) | 비트 반전(보수) |
ex)
더보기
AND
0110
0010
----
0010 // 2
OR
0110
0010
----
0110 // 6
XOR
0110
0010
----
0100 // 4
NOT
0110
----
1001 // -7
* NOT연산을 하면 비트가 반전되지만 반전된 비트는 왼쪽끝이 1이기 때문에 컴퓨터는 음수로 인식한다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
Spring) [org.springframework.web.servlet.view.BeanNameViewResolver] No matching bean found for view name '' (0) | 2021.10.27 |
---|
Comments