비전공자의 개발과 친해지기/연산자

[JAVA : 연산자]3. 비교 / 논리 / 비트 연산자

justdoIT0730 2022. 4. 7. 18:32
728x90
728x90

- 비교 연산자

 비교 연산자는 연산자의 좌우 값을 비교하는 연산자입니다. 산수의 부등호와 같은 역할을 수행하며, 결과는 boolean형(true 혹은 false)로 반환됩니다. 

 

import java.io.*;
class Main {
    public static void main(String[] args) {
        int a = 4;
        int b = 3;
        System.out.println( a < b );
    }
}

 

 위 예제 코드에서 int형 변수 a, b는 각각 4와 3이라는 숫자로 초기화되었고, 6번째 줄을 보면 a < b에 비교 연산자가 사용되었습니다.

 

 a와 b에 대입된 값을 적용해 보면 "4 < 3"라는 비교 연산으로 볼 수 있습니다. 그런데 4는 3보다 큰 숫자이므로 4 < 3은 잘못된 조건이므로 false가 출력됩니다.

 

 

비교연산자의 종류

 

 여기서 "==" 연산자 "=" 연산자를 혼동하지 않도록 유의하시기 바랍니다.

 "="은 일반적인 산수에서는 "좌, 우측이 같다"라는 뜻이지만 프로그래밍에서는 "우측의 값을 좌측에 대입한다"라는 뜻이며, 프로그래밍에서 "좌, 우측이 같다"를 나타내는 연산자는 "=="이니 쉽게 헷갈릴 수 있습니다.

 

- 논리 연산자

 논리 연산자는 비교 연산자를 통해 도출된 true/false에 대한 논리 조합이며,AND(&&), OR(||), NOT(!) 총 세 가지를 사용할 수 있습니다.

 

AND( && ) 연산자는 좌우 값이 모두 true일 경우에만 true이고 그 외의 경우는 전부 false를 반환합니다.

 

import java.io.*;
class Main {
    public static void main(String[] args) {
        System.out.println( true && true );        // true이고 true이면 true
        System.out.println( true && false );       // true이고 false이면 false        
        System.out.println( false && true );       // false이고 true이면 false
        System.out.println( false && false );      // false이고 false이면 false
    }
}

 

좌우 값 중 단 하나라도 false가 있으면 false가 출력됩니다.

 

 

OR( || )연산자는 좌우 값 중 하나라도 true일 경우 true가 반환됩니다.

import java.io.*;
class Main {
    public static void main(String[] args) {
        System.out.println( true || true );        // true이고 true이면 true
        System.out.println( true || false );       // true이고 false이면 true        
        System.out.println( false || true );       // false이고 true이면 true
        System.out.println( false || false );      // false이고 false이면 false
    }
}

OR 연산자의 좌우 값이 둘 다 false일 때를 제외하고 전부 다 true가 출력됩니다.

 

 

NOT(!)연산자는 true를 false로 false를 true로 뒤바뀝니다.

import java.io.*;
class Main {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        System.out.println(!(a == b));
    }
}

 

6번째 줄에서 a == b라는 조건은 a와 b가 서로 다른 숫자이므로 false가 반환되는 것이 맞습니다.

 

하지만 그 결과에 NOT 연산자가 사용되어 출력되는 결과는 true가 됩니다.

 

 

- 비트 연산자

비트 연산자의 경우 자바에서는 잘 사용되지 않는 연산자 이므로 가볍게 읽고 넘어가겠습니다. 

 

& 연산자& 연산자는 같은 위치의 bit간에 논리 연산의 and 연산자 입니다.
 
 
| 연산자| 연산자는 같은 위치의 bit간에 논리 연산의 or 연산자 입니다.
 
 
^ 연산자^ 연산자는 같은 위치의 bit간에 논리 연산의 xor 연산자 입니다.
 
 
~ 연산자~ 연산자는 같은 위치의 bit간에 논리 연산의 not 연산자 입니다.

 

시프트 연산자( << , >> , >>> )는 비트를 좌, 우로 밀어주는 연산자입니다. 

 

<< (왼쪽 시프트 연산자)는 비트를 왼쪽으로 밀어낸 뒤 공백을 0으로 채웁니다.

 

 예를 들어 11001010을 왼쪽으로 두 칸 밀고 싶다면 11001010 << 2라고 작성하며 그 결과 값은 00101000 이 됩니다.

 

 왼쪽에 있던 11이 사라지고 오른쪽 끝에 00이 붙은 것을 볼 수 있습니다.

 

 

>> (오른쪽 시프트 연산자)는 비트를 오른쪽으로 밀어내지만, 밀어내기 전 가장 왼쪽 비트와 동일한 숫자로 공백을 채웁니다.

 

 예를 들어 11001010 을 오른쪽으로 세 칸 밀고 싶다면 11001010 >> 3이라고 작성하며 그 결과 값은 11111001 이 됩니다.

 

 오른쪽에 있던 010 이 사라지고, 왼쪽에는 111이 추가된 것을 볼 수 있습니다.

 

 밀어내기 전 가장 왼쪽에 있던 숫자가 1이기 때문에 1이 3개 추가되는 겁니다. 마찬가지로 01100110 >> 3의 결과 값은 00001100 이 됩니다.

 

 만약 오른쪽으로 밀어낼 때 공백을 0으로 채우고 싶다면 >>> (논리 오른쪽 시프트 연산자)를 사용해 봅시다. >>> 는 비트를 우측으로 밀어내면서 공백을 0으로 채우는 연산자입니다. 즉, 11001010 >>> 2의 결과 값이 00110010 이 되도록 만듭니다.

 

728x90
728x90