연산자

쌩 초보의 개발로그·2022년 4월 13일
0

자바 공부

목록 보기
5/10
post-thumbnail

산술 연산자

산술 연산자는 수학적인 계산에 사용되는 연산자이다.
다만 수학 연산자와 프로그래밍 연산자는 기호가 조금씩 다르다.

이때 곱하기, 나누기, 나머지 값은 수학적 기호와 다른것을 알 수 있다.

 public static void main(String[] args) {
        int result = 3 + 2;
        System.out.println(result); // 값은 5이 나온다.

        result = result - 1;
        System.out.println(result); // 값은 위의 5 - 1 이 되기 때문에 4가 나온다.

        result = result * 2;
        System.out.println(result); // 값은 위의 4 * 2 가 되기 때문에 8이 나온다.

        result = result / 2;
        System.out.println(result); // 값은 위의 8 / 2 가 되기 때문에 4가 나온다.

        result = result % 3;
        System.out.println(result); 
        // 4 % 3 을 나누고 난 후 나머지 값이 1이기 때문에 1이 출력된다.
    }
}

위의 예시 코드처럼 산술 연산자를 사용할 수 있다.

이때 나머지 값에는 익숙하지 않기 때문에 나머지값만 추가로 한번 알아보도록 하자.

public class blog {

    public static void main(String[] args) {
       int a = 5;
        System.out.println(0%a); // 0 출력
        System.out.println(1%a); // 1 출력
        System.out.println(2%a); // 2 출력
        System.out.println(3%a); // 3 출력
        System.out.println(4%a); // 4 출력
        System.out.println(5%a); // 0 출력
        System.out.println(6%a); // 1 출력
        System.out.println(7%a); // 2 출력
    }
}

위 처럼 보면 나누기 값을 출력하는게 아닌 나눈 다음 남은 값을 출력하는 것을 볼 수 있다.

상수 말고 문자열에서도 "+" 연산자는 사용할 수 있다.

 public static void main(String[] args) {
       String A = "Apple ";
       String B = "is ";
       String C = "good";
        System.out.println(A+B+C);
    }
}

위 처럼 출력을 하면 Apple is good 으로 하나의 문자열로 출력이 된다.

연산자 형변환

이때 자바는 여러가지의 데이터 타입이 있는 것을 전 타임에 공부를 하면서 살펴 보았는데 같은 상수여도 정수와 실수가 나뉘게 된다. 그럼 타입별로 나누기한 결과를 살펴보자

  public static void main(String[] args) {
       int a = 7;
       int b = 3;

       float c = 7.0F;
       float d = 3.0F;

        System.out.println(a/b); // 2가 출력
        System.out.println(c/d); // 2.3333333이 출력
        System.out.println(a/d); // 2.3333333이 출력
    }
}

첫 번쨰는 정수 / 정수를 나눠 2가 나눈값이고 나머지는 삭제되어 버려졌다.

삭제된 이유는 정수는 소수점을 표현 할 수 없으므로 정수만 표시되었다.

두 번째 경우는 실수 / 실수를 나누어 2가 나눈값이고 나머지 값이 .333.... 으로 출력이 되었다.

나머지가 출력된 이유는 실수는 소수점을 표현 하기 때문이다.

세 번째 경우는 정수 / 실수를 나누었다. 이때 2가 나눈값이고 나머지 값이 .333... 으로 출력이 되었다.

이거를 통해 정수가 실수로 ​암시적으로 형 변환 이 이루어진것을 알 수 있다.

단항 연산자

위 에서 상수 + 상수를 하였을때 사용된 +는 이항 연산자이다. 좌향과 우향이 더해주는 작업을 해주는 연산자를 볼 수 있다.

그럼 자바에서 제공하는 단항 연산자를 살펴보자.

위의 단항 연산자의 예제를 살펴보자

public static void main(String[] args) {
       int i = 1;
       i++;
        System.out.println(i); // 2 출력
        ++i;
        System.out.println(i); // 3 출력
        System.out.println(++i); // 4 출력
        System.out.println(i++); // 4 출력
        System.out.println(i); // 5 출력
    }
}

위를 살펴보면 i++ 과 ++i 를 살펴보면 단항 연산자로 사용해서 1에서 점점 늘어나는게 보일것이다.

++는 자신과 결합되어있는 항의 값에 1을 더하는 연산이 된다.

이 때 i++ 와 ++i 의 차이점을 많이 어려워 할 수 있다 초반에

외우기 싫은 방법은 ++i는 선증가 후출력이며 i++는 선출력 후증가이다.

즉 i = 4 이고 ++i 를 출력하면은 선증가 후출력이 되기 때문에 5가 출력되는 것을 확인 할 수 있고

i++ 를 출력하면은 선출력 후증가이기 때문에 값은 4가 나오지만 실질적 입력되있는 변수는 5인것을 확인 할 수 있다.

논리 연산자


논리 연산자는 주로 조건문에서 많이 사용되는 연산자이다.
예제코드로 한번 살펴보자

public static void main(String[] args) throws IOException {
        // & 연산자
        System.out.println(1 == 1 & 2 == 3); // 하나만 맞으니까 false
        System.out.println(1 > 2 & 4 < 2); // 둘 다 틀리니까 false
        System.out.println(1 < 2 & 4 > 2); // 둘 다 맞으니까 true
        // | 연산자
        System.out.println(1 == 1 | 2 == 3 ); // 하나만 맞기 때문에 true
        System.out.println(1 > 2 | 4 < 2); // 둘 다 틀리기 때문에 false
        System.out.println(1 < 2 | 4 > 2); // 둘 다 맞기 때문에 true
        // ^ 연산자
        System.out.println(1 == 1 ^ 2 == 3 ); // 하나만 맞기 때문에 true
        System.out.println(1 > 2 ^ 4 < 2); // 둘 다 틀리기 때문에 false
        System.out.println(1 < 2 ^ 4 > 2); // 둘 다 맞기 때문에 false
        // ! 연산자
        System.out.println(!(1 == 1)); // 1 == 1 참 이기 때문에 false
        System.out.println(!(1 > 2)); // 1 > 2 는 거짓 이기 때문에 true
    }

이때 위의 &연산자를 살펴보면 &논리곱의 경우 두 조건이 모두 참이여야 참이 된다.

이때 & 논리곱을 수정해보자

A && B --> 실행 결과는 같으나 둘 중 하나가 참이라면 참이 되므로 A가 참이면 B는 확인하지않고 true를 뱉어낸다.
논리곱과 논리합에 주의하자.



위의 표는 연산자 우산순위와 결합방향을 나타낸 표이다. 잘 확인해보고 외워서 사용하자.

int a = 7 + 2 * 3; // 13

위에를 출력하면 2 3이 먼저 우선순위로 책정이 되어 2 3 을 진행 후 7 + 6 이 되므로 13의 값이 출력된다.

profile
안녕하세요 쌩 초보 장휘주 입니다. 열심히 하는 개발자가 될게요.

0개의 댓글