[Java] 논리연산자/비트연산자

Yeoonnii·2022년 8월 15일
0

Java

목록 보기
1/30
post-thumbnail

논리연산자

논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만을 허용한다.

'&&' (AND 연산자)

연산자 '&&''AND(그리고)'에 해당하며, '||'(OR)과는 반대로 모두 true인 경우에만 true를 반환하고 나머지 경우에는 false를 반환한다.

'||' (OR 연산자)

연산자 '||''OR(또는)'에 해당하며, 하나라도 true인 경우 true를 반환한다.

'!' (NOT 연산자)

연산자 '!''NOT(부정)'에 해당하며, 조건식의 결과를 반대로 바꾸어 주는 단항연산자이다.
boolean 형식의 변수 값을 반대로 변경해주며 true → false, false → true로 변경해준다.


비트연산자

비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자이다.
또한, 비트 단위로 왼쪽이나 오른쪽으로 전체 비트를 이동하거나, 1의 보수를 만들 때도 사용된다.

'&' (비트 AND 연산자)

비트 연산자 '&''AND(그리고)'에 해당하며, 대응되는 비트가 모두 1이면 1을 반환한다.

'|' (비트 OR 연산자)

비트 연산자 '|'는 'OR(또는)'에 해당하며, 대응되는 비트 중에서 하나라도 1이면 1을 반환한다.

'^' (비트 XOR 연산자)

비트 연산자 '^''XOR(베타적 논리합)'에 해당하며, 대응되는 비트가 서로 다르면 1을 반환한다.

'~' (비트 NOT 연산자)

비트 연산자 '~''NOT(부정)'에 해당하며, 피연산자가 단 하나뿐인 단항 연산자입니다.주어진 비트가 1이면 0으로, 0이면 1로 반전시켜 1의 보수로 만들어 준다.

'<<' (left shift 연산자)

비트 연산자 '<<'는 지정한 수만큼 피연산자의 모든 비트를 전부 왼쪽으로 이동시킨다.
왼쪽 시프트 연산자의 문법

피연산자<<이동할비트수

위와같이 왼쪽으로 모든 비트를 이동시키면, 맨 왼쪽의 비트는 지정된 수만큼 자동으로 버려지게 된다. 그리고 왼쪽으로 이동된 수만큼 비게 되는 오른쪽 비트에는 자동으로 0이 채워진다.
이러한 특징을 이용하여 속도가 다소 느린 산술 곱셈 연산을 왼쪽 시프트 연산으로 대체할 수 있다.

'>>' (right shift 연산자)

비트 연산자 '>>'는 지정한 수만큼 피연산자의 모든 비트를 전부 오른쪽으로 이동시킨다.
오른쪽 시프트 연산자의 문법

피연산자>>이동할비트수

이렇게 오른쪽으로 모든 비트를 이동시키면 맨 오른쪽의 비트는 지정된 수만큼 자동으로 버려지게 된다. 그리고 오른쪽으로 이동된 수만큼 비게 되는 왼쪽 비트에는 자동으로 0이 채워진다.
이러한 특징을 이용하여 속도가 다소 느린 산술 나눗셈 연산을 오른쪽 시프트 연산으로 대체할 수 있다.

💡 오른쪽 시프트 연산은 왼쪽 시프트 연산과는 달리 시스템마다 약간의 차이가 발생하게 된다.
현재 대부분의 시스템에서는 최상위 부호 비트(MSB)를 시프트 연산의 대상에서 제외하고 있기 때문에 사용시 유의해야 한다.
따라서 최상위 부호 비트가 중요한 의미를 가지는 부호있는 정수에 대해서는 가급적 시프트 연산을 하지 않는 것이 좋다.


🌎 참고
http://www.tcpschool.com/c/c_refer_bitCalculation
http://www.tcpschool.com/java/java_operator_logic

0개의 댓글