비트 연산자( &, |, ^, ~, <<, >> )
비트 연산자는 피연산자를 비트단위로 논리 연산
| (OR연산자) : 피연산자 중 한쪽의 값이 1이면 1을 결과로 얻음, 그 외에는 0을 얻음
&(AND연산자) : 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻음, 그 외에는 0을 얻음
^(XOR연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻음, 그 외에는 0을 얻음
(연산자 '^'는 배타적 XOR(eXclusive OR) 피연산자 값 서로 배타적인 경우에만 참(1)을 얻음)
비트 연산에서도 피연산자의 타입을 일치시키는 산술 변환이 일어날 수 있다
toBinaryString() : 4byte의 정수를 32자리의 2진수로 변환하여 출력
비트 전환 연산자 ( ~ )
피연산자를 2진수로 표현했을 때 0은 1로, 1은 0으로 바꾼다
(비트전환연산자를 1의 보수 연산자라고도 한다)
피연산자의 타입이 int보다 작으면 int로 자동 형변환(산술 변환) 후에 연산하기 떄문에 연산 결과는 32자리의 2진수이다
쉬프트 연산자 ( <<, >> )
피연산자의 각 자리를 오른쪽(>>) 또는 왼쪽(<<)으로
이동(shift)한다고 해서 쉬프트 연산자(shift operator)라고 함
피연산자가 음수인 경우 빈자리를 1로 채우고 양수일 경우는 0으로 채운다
쉬프트 연산자의 좌측 피연산자는 산술변환 적용되어 int보다 작을 경우 int타입으로 자동 변환,
but 우측 피연산자에는 산술변환 적용x
x << n은 x * 2^n의 결과와 같음
x >> n은 x / 2^n의 결과와 같음
x << n 또는 x >> n 에서 n의 값이 자료형의 bit수 보다 크면 자료형의 bit수로 나눈 나머지만큼만 이동
ex) int타입 4byte(=32bit) 기준, 8 >> 32는 다시 제자리로 돌아와 아무 일도 하지 않는다
그러므로 8 >> 34는 34를 32로 나눈 나머지인 2만큼만 이동한다(= 8 >> 2)
(n은 정수만 가능하며 음수인 경우, 부호없는 정수로 자동 변환)
'Backend > Java' 카테고리의 다른 글
자바의 정석 정리(18) - 조건문 (0) | 2022.06.01 |
---|---|
자바의 정석 정리(17) - 논리, 그 외 연산자 (0) | 2022.05.28 |
자바의 정석 정리(15) - 비교 연산자 (0) | 2022.05.27 |
자바의 정석 정리(14) - 산술 연산자 (0) | 2022.05.27 |
자바의 정석 정리(13) - 단항 연산자 (0) | 2022.05.26 |