본문 바로가기

프로그래밍/Java 프로그래밍

자바 연산자와 연산식2

이항 연산자


이항 연산자는 피연산자가 2개인 연산자를 말하며, 여기에는 산술연살자(+, -, *, /, %), 문자열 결합 연산자(+), 비교 연산자(<, <=, >=, >, ==, !=), 논리 연산자(&&, ||, &, |, ^), 대입 연산자(=, +=, -=, *=, /=, %=) 등이 있습니다.



산술 연산자(+, -, *, /, %)

산술 연산자는 사칙연산자인 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/)과 나머지를 구하는 %까지 총 5개입니다. 산술 연산자는 boolean 타입을 제외한 모든 기본 타입에 사용할 수 있습니다. 사칙연산은 기본적으로 알고 있겠지만 %연산자는 나눗셈을 수행한 후 몫이 아닌 나머지를 돌려주는 연산자입니다. 산술 연산자의 특징은 피연산자들의 타입이 동일하지 않을 경우 다음과 같은 규칙을 사용해서 피연산자들의 타입을 일치시킨 후 연산을 수행한다는 점입니다.


1. 피연산자들이 byte, short, char 타입일 경우 모두 int 타입으로 변환된 후에 연산을 수행합니다.

   ex) byte + byte --> int + int = int


2. 피연산자들이 모두 정수타입이고 long 타입이 포함되어 있을 경우, 모두 long 타입으로 변환된 후 연산을 수행합니다.

   ex) int + long --> long + long = long


3. 피연산자 중 실수타입(float, double)이 있을 경우, 허용범위가 큰 실수 타입으로 변환된 후 연산을 수행합니다.

   ex) int + double --> double + double = double


위의 3가지 법칙을  요약하면 좀 더 큰 타입으로 변환하여 연산된다는 것입니다. 정수형에서는 연산을 수행할 때 int 타입으로 변환하기 때문에 항상 int 타입을 이용해서 값을 저장하는 것이 안전합니다.




라인 17의 나눗셈(/)은 정수 나누기 정수이므로 결과값이 정수가 됩니다. 정상적인 결과라면 2.5가 되지만 정수타입이므로 2가 됩니다. 라인 20의 % 연산자는 나머지를 구하는 연산자이므로 결과값이 1이 됩니다. v1과 v2가 모두 정수형이지만 나누기에서 제대로 된 결과값을 얻으려면 실수형으로 변환해야됩니다. 저장하는 변수뿐만 아니고 피연산자도 실수형으로 바꿔줘야합니다.




라인 7은 컴파일에러가 발생하기때문에 주석처리했습니다. 라인 8처럼 정수형으로 저장해야만 오류가 발생하지 않습니다. 왜냐하면 위에서 설명했듯이 정수형은 연산할 때 int 형으로 변환되기 때문입니다. i3이 정수형이기때문에 그냥 출력을 하면 코드값인 66이 들어갑니다. 이것을 문자로 출력하려면 (char)으로 캐스팅해야합니다.



문자열 결합 연산자(+)

문자열 결합 연산자인 +는 문자열을 서로 결합하는 연산자입니다. + 연산자는 산술 연산자, 부호 연산자인 동시에 문자열 결합 연산자이기도 합니다. 피연산자 중 한쪽이 문자열이면 + 연산자는 문자열 결합 연산자로 사용되어 다른 피연산자를 문자열로 변환하고 서로 결합합니다. 이전 포스팅에서 얘기한 것처럼 + 연산자는 왼쪽에서 오른쪽으로 연산되고 피연산자가 문자열인 경우 다른쪽 피연산자도 문자열로 변환되어 연산을 합니다. 정확한 내용은 이전 포스팅을 확인해 주십시요.



라인 9를 보면 "JDK" + 3 + 3.0입니다. 이 경우 왼쪽부터 연산을 하니까 "JDK" + 3이 먼저 실행됩니다. 여기서 "JDK"는 문자열이므로 3도 문자열로 바뀝니다. 그러면 "JDK3"이 되고 그러면 "JDK3" + 3.0이 되고 3.0이 문자열로 바껴서 "JDK33.0"입니다. 하지만 라인 10을 보면 3 + 3.0 + "JDK"입니다. 여기서 연산방향이 왼쪽에서 오른쪽이므로 3 + 3.0이 우선 연산되고 그러면 6.0이 됩니다. 그 다음에 6.0 + "JDK"이 됩니다. 이 경우 "JDK"가 문자열이므로 6.0도 문자열로 바뀝니다. 그래서 "6.0JDK"이 됩니다.


'프로그래밍 > Java 프로그래밍' 카테고리의 다른 글

자바연산자와 연산식4  (0) 2020.06.29
자바 연산자와 연산식3  (0) 2020.06.28
자바의 연산자와 연산식1  (0) 2020.06.25
자바의 변수와 시스템 입출력  (0) 2020.06.24
자바의 타입 변환1  (0) 2020.06.22