* 비트단위 연산
- &연산자 : 비트단위 AND
0 & 0 : return 0
0 & 1 : return 0
1 & 0 : return 0
1 & 1 : return 1
ex)
int a = 15 // 00000000 00000000 00000000 00001111
int b = 20 // 00000000 00000000 00000000 00010100
int c = a & b
출력 결과 c = 4로 표현
00000000 00000000 00000000 00001111
AND 00000000 00000000 00000000 00010100
----------------------------------------------
00000000 00000000 00000000 00000100 : 4
- |연산자(OR) : 둘중에 하나라도 1(true)인경우에 반환
0 | 0 : return 0
0 | 1 : return 1
1 | 0 : return 1
1 | 1 : return 1
ex)
int a = 15 // 00000000 00000000 00000000 00001111
int b = 20 // 00000000 00000000 00000000 00010100
int c = a | b
출력 결과 c = 31로 표현
00000000 00000000 00000000 00001111
OR 00000000 00000000 00000000 00010100
----------------------------------------------
00000000 00000000 00000000 00011111 : 31
- ^연산자(XOR):두개가 서로 다른 경우에만 반환
0 ^ 0 : return 0
0 ^ 1 : return 1
1 ^ 0 : return 1
1 ^ 1 : return 0
ex)
int a = 15 // 00000000 00000000 00000000 00001111
int b = 20 // 00000000 00000000 00000000 00010100
int c = a ^ b
출력 결과 c = 27로 표현
00000000 00000000 00000000 00001111
OR 00000000 00000000 00000000 00010100
----------------------------------------------
00000000 00000000 00000000 00011011 : 27
- ~연산자(NOT): 값을 반대로 바꾸어 준다
~0 : return 1
~1 : return 0
ex)
int a = 15 // 00000000 00000000 00000000 00001111
int b = ~a
출력 결과 b = 27로 표현
00000000 00000000 00000000 00001111
-> 11111111 11111111 11111111 11110000 : (1의 보수, 부호비트도 반전)
-> 10000000 00000000 00000000 00001111 : (1을 더함)
-> 10000000 00000000 00000000 00010000 : (값은 -16 )
- <<연산자: 왼쪽 shift연산
a << b : a의 비트들을 b칸씩 왼쪽으로 이동한 값을 반환
8 << 2 : 8의 비트들을 왼쪽으로 2칸씩 이동한 값을 반환
ex)
int a = 15 // 00000000 00000000 00000000 00001111
int b = a<<2 //a의 비트들을 왼쪽으로 2칸씩 이동
출력 결과 b = 60로 표현
00000000 00000000 00000000 00001111
-> 00000000 00000000 00000000 00111100 : ( 결과 : 60 )
- >>연산자: 오른쪽 shift연산
a >> b : a의 비트들을 b칸씩 오른쪽으로 이동한 값을 반환
8 >> 2 : 8의 비트들을 오른쪽으로 2칸씩 이동한 값을 반환
ex)
int a = -10 // 11111111 11111111 11111111 11110110
int b = a>>2 //a의 비트들을 오른쪽으로 2칸씩 이동
출력 결과 b = 60로 표현
11111111 11111111 11111111 11110110
-> 0011111111 11111111 11111111 111101 : (0으로 채우는 시스템)
-> 1111111111 11111111 11111111 111101 : (1로채우는 시스템)
=====================================================
참고) shift연산자는 시스템(처리방식)에 따라 결과 값이 달라진다