프로그래밍 언어/자바

자바 7. 연산자-2

닉네임못짓는사람 2020. 8. 11. 13:50
반응형

비교 연산자


1. 대소 비교 연산자 <, >, <=, >=

이 네가지 연산자의 경우 따로 설명할 필요 없을 거라 생각합니다.

여러분이 수학에서 사용하던 비교연산자와 동일한 동작을 수행하고, 결괏값은 boolean형 입니다.

주의할 점은 기본형에선 boolean외에 모든 자료형에 사용할 수 있지만, 참조형에는 사용할 수 없습니다.

public class example{
    public static void main(String[] args){
        int a = 10;
        int b = 20;
        System.out.print(a > b);
    }
}

2. 등가비교 연산자 ==, !=

이 두 연산자의 경우 두 피연산자의 값이 같은지, 같지 않은지 비교하는 연산자인데,

수학에서는 두 수가 같을 경우 =을 사용하지만 자바에서 =는 이미 대입 연산자로 사용하고 있기 때문에

같을 경우엔 ==를, 다를 경우엔 !=를 사용합니다. 결괏값은 위와 동일하게 boolean형입니다.

public class example{
    public static void main(String[] args){
        int a = 10;
        int b = 10;
        System.out.print(a == b);
    }
}

이때 주의해야 할 점은 두 피연산자가 소수이고, 각각 float과 double형일 때입니다.

컴퓨터에선 소수의 경우 정수와 달리 근삿값으로 계산하기 때문에

0.1이라고 해서 정확히 0.1이라는 값이 딱 떨어지는 것이 아닙니다.

public class example{
    public static void main(String[] args){
        float fl = 0.1f;
        double db = 0.1;
        System.out.print(fl + "\n");
        System.out.print(db + "\n");
        System.out.print(fl == db);
    }
}

위의 코드를 보시면 우리는 두 변수를 모두 0.1로 초기화했고, 출력값도 0.1로 출력됩니다.

하지만 정작 비교 연산자를 사용해 비교하면 두 값이 다르다고 출력되는 것을 볼 수 있습니다.

이는 이전에도 이야기했던 것처럼 두 자료형이 표현할 수 있는 값의 정밀도 차이 때문입니다.

float의 경우 소수점 이하 8자리까지만 표현이 되고, double은 그 두 배 정도라고 이야기했었습니다.

public class example{
    public static void main(String[] args){
        float fl = 0.1f;
        double db = 0.1;
        System.out.format("%.20f\n", fl);
        System.out.format("%.20f\n", db);
        System.out.print(fl == db);
    }
}

코드를 위와 같이 변경하면, 변수의 값을 소수점 이하 20번째 자리까지 볼 수 있는데,

float의 경우 실제 값은 0.10000000149011612000가 출력됐습니다.

이것이 float으로 사용된다면 8번째 자리인 0.10000000까지만 사용돼서 문제가 없겠지만,

float형과 double형의 두 변수를 사용해 연산하게 되면 float형의 변수가 자동으로

double형으로 형변환 되기 때문에 실제로 서로 다른 값이 되어 false가 출력되는 것입니다.

 

이를 예방하기 위해선 자동 형변환이 아닌 dobuel형을 float형으로 형변환 시켜주거나,

소수점 8번째 자리 이하로 동일하게 잘라서 비교해야 합니다.

논리 연산자


1. 논리 연산자 &&, ||

논리 연산자는 피연산자로 boolean 또는 결괏값이 boolean형 값이 나오는 조건식만을 허용합니다.

&&의 경우 AND라고 하며, 좌우 피연산자가 모두 true일 때 true값을 반환해줍니다.

이는 곱 연산이라고도 하는데, 곱셈에서 두 숫자 중 하나라도 0이면 결괏값이 0이 되는 것과 동일합니다.

예를 들어 true && false = false, true && true = true입니다.

 

||의 경우 OR라고 하며, 좌우 피연산자 중 하나라도 true이면 true값을 반환합니다.

이는 합연산이라고도 하며, 덧셈과 마찬가지라고 생각하시면 될 것 같습니다.

예를 들어 true || false = true, false || false = false입니다.

 

이 두 연산자는 주로 조건문 또는 반복문에서 조건식 간의 결합에 사용됩니다. 또한 &&가 ||보다

우선순위가 높기 때문에 같이 사용할 땐 자신의 의도에 맞도록 괄호로 구분해서 사용하시는 걸 추천합니다.

 

2. 비트 연산자 &, |, ^

비트 연산자는 피연산자의 비트값에 대해 연산을 수행합니다.

이 연산자들은 실수형인 float과 double을 제외한 모든 기본 자료형에 사용 가능합니다.

&과 |의 경우 바로 위에서 봤던 &&, ||과 완전히 동일한 작업을 비트값에 대해 수행합니다.

예를 들어 1001&1110 = 1000이 되며, 1000|1011 = 1011이 됩니다.

 

^의 경우 생소하실 수도 있는데, 이는 XOR라고 부릅니다.

XOR연산자는 좌우 피연산자가 모두 다를 때만 1을 반환하고, 그 외에는 모두 0을 반환합니다.

예를 들어 1001 = 1110 = 0110이 됩니다.

쉽게 OR연산에서 두 피연산자가 모두 true일 때만 false로 바꿔주신다고 생각하시면 됩니다.

 

이 세 가지 연산자에도 위와 마찬가지로 우선순위가 존재하기 때문에,

사용할 때 괄호로 식을 적절하게 묶어서 사용하시는 것을 추천합니다.

그 외의 연산자


1. 삼항 연산자 ? :

삼항 연산자는 세 개의 피연산자를 필요로 하기 때문에 삼항 연산자라고 이름 지어졌습니다.

형태는 조건식 ? 식1 : 식2와 같은 형태인데, ?의 왼쪽에 있는 피연산자, 즉 조건식이 true이면

:의 왼쪽에 있는 식1을 반환하고, false이면 오른쪽에 있는 식2를 반환합니다.

간단한 예제로 확인해봅시다.

public class example{
    public static void main(String[] args){
        System.out.print(true?5:10 );
        System.out.print("\n");
        System.out.print(false?5:10);
    }
}

2. 대입 연산자 =, op=

대입 연산자는 말 그대로 값을 대입하는 연산자입니다.

대입 연산자의 왼쪽에는 반드시 변수가 와야 하며, 오른쪽에는 변수, 리터럴, 수식이 올 수 있습니다.

op=의 경우 op는 operator, 즉 연산자의 약자로서 연산자=같은 형태로 간략화할 수 있습니다.

 

예를 들어 변수 a에 10을 더하고 싶다고 하면, a = a + 10이라고 해야 값이 더해지는데,

이를 a += 10과 같은 형태로 간략화해서 사용할 수도 있습니다.

대입 연산자에서 사용되는 연산자를 표로 보여드리겠습니다.

위의 표에 있는 연산자들은 op=과 같은 형태로 간략화시켜서 사용할 수 있습니다.

 

이상으로 연산자에 대한 설명은 마치도록 하고, 다음은 조건문에 대해 알아보겠습니다.

감사합니다.

반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

자바 9. 반복문  (0) 2020.08.13
자바 8. 조건문  (0) 2020.08.12
자바 6. 연산자-1  (0) 2020.08.10
자바 5. 형변환  (0) 2020.08.07
자바 4. 자료형-2  (0) 2020.08.06