논리 연산자와 비트 연산자
논리 연산자
논리 연산자 | 설명 |
---|---|
&& | 논리식이 모두 참이면 참을 반환함. (논리 AND 연산) |
|| | 논리식 중에서 하나라도 참이면 참을 반환함. (논리 OR 연산) |
! | 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함. (논리 NOT 연산) |
A | B | A && B | A || B | !A |
true | true | true | true | false |
true | false | false | true | false |
false | true | false | true | true |
false | false | false | false | true |
아래 예제코드로 학습해 보겠습니다.
비트 연산자
비트 연산자 | 설명 |
---|---|
& | 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산) |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산) |
^ | 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산) |
~ | 비트를 1이면 0으로, 0이면 1로 반전 시킴. (비트 NOT 연산, 1의 보수) |
<< | 명시된 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산) |
>> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산) |
>>> | 지정한 수만큼 비트를 전부 오른쪽으로 이동 시키며, 새로운 비트는 전부 0이 됨. |
비트 연산자는 값을 비트 단위로 연산합니다.
따라서 0과 1로 표현이 가능한 정수형이나 형변환이 가능한 자료형만 연산이 가능합니다.
아래 예제코드로 학습해 보겠습니다.
아마 여기서 ~ 의 1의 보수방식이 이해가 바로 되지 않으실 겁니다.
이해를 돕기위해 음수표현 방식을 간단하게 학습하고 가겠습니다.
2진수의 음수표현
진수의 음수를 표현하는 방식에는 부호 절대값, 1의 보수, 2의 보수가 있습니다.
8비트 기준으로 설명하겠습니다.
부호 절대값
가장 왼쪽에 있는 비트를 부호비트라고 했을 때 이 부호비트가 '0인지 1인지' 에 따라 양수, 음수로 구분됩니다.
0일때는 양수 , 1일때는 음수
2진수 00000011 = 10진수: 3
2진수 10000011 = 10진수: -3
1의 보수
1의 보수는 11111111 - x 를 하는 방식입니다.
11111111 - x 는 x 를 반전시킨 것과 같습니다.
11111111 - 00101001 = 11010110
즉, 1이면 0, 0이면 1이 됩니다.
-13을 1의 보수 방식으로 표현해 보겠습니다.
13을 2진수로 표현 : 00001101
11111111 - x 공식에 대입
결과 : 11110010
2의 보수
가장 많이 사용하는 방식입니다.
2의 보수는 100000000 - x 를 하는 방식입니다.
2의 보수 방식도 가장 왼쪽숫자가 0일 경우 양수, 1일 경우 음수를 표현합니다.
-13을 2의 보수 방식으로 표현해 보겠습니다.
13을 2진수로 표현 : 00001101
100000000 - x 공식에 대입
결과 : 11110011
쉽게 계산하는 방법은 1의 보수를 구한뒤에 나온수에 +1을 하면 됩니다.
-9를 2의 보수 방식으로 표현해 보겠습니다.
-9를 1의 보수 방식으로 표현 : 00001001(9) -> 11110110
11110110 + 1
결과 : 11110111
Ref. Java의 정석 기초편 Chapter3(15, 16)
Ref. 논리 연산자
Last updated