티스토리 뷰
🟩 부호 연산자
부호 연산자는 말그대로 변수의 부호를 유지하거나 변경한다.
부호연산자에는 +, - 가 있는데, 각각 피연산자의 부호 유지, 피연산자의 부호 변경의 기능이 있다.
byte a = 100;
int result = -a;
( 여기서, byte result = -a; 라고 하면 에러난다!! 왜냐하면 정수 타입(byte, short, int)의 연산 결과는 int타입이기 때문이다. )
부호연산자 +는 잘 사용되지 않고, - 연산자는 변수값의 부호를 변경할 때 사용된다.
🟩 증감 연산자
증감 연산자는 ++과 -- 두개가 있다. 각각 변수의 값을 1증가, 1감소 시킨다.
이때,
변수 단독으로 증감 연산자가 사용될 경우에는 변수의 앞뒤 어디에 붙어도 결과는 동일하다.
즉, ++i, i++ 모두 i = i + 1; 로 동일하다는 의미다.
마찬가지로, --i, i-- 모두 i = i - 1; 로 동일하다.
하지만, 여러 개의 연산자가 포함되어 있는 연산식에서는 증감 연산자의 위치에 따라 결과가 달라진다.
증감 연산자가 변수 앞에 있으면 우선 변수를 1증가 또는 1감소 시킨 후에, 다른 연산을 수행한다.
증감 연산자가 변수 뒤에 있으면 모든 연산을 끝낸 후에 변수를 1증가 또는 1감소 시킨다.
아래는 그 예시이다.
int x = 1;
int y = 1;
int result1 = ++x + 10; // --> int result1 = 2 + 10;
int result2 = y++ + 10; // --> int result2 = 1 + 10; --> y +1증가
+)
아래는 산술 연산의 특징이다.
1. 피연산자가 정수 타입(byte, short, char, int)이면 연산의 결과는 int타입이다.
2. 피연산자가 정수 타입이고, 그 중 하나가 long타입이면 연산의 결과는 long타입이다.
3. 피연산자 중 하나가 실수 타입이면 연산의 결과는 실수 타입이다.
🟩 오버플로우, 언더플로우
🔵 오버플로우 (overflow)
: 타입이 허용하는 최대값을 벗어난 것
🔵 언더플로우 (underflow)
: 타입이 최소값을 벗어나는 것
정수타입 연산에서 오버플로우 또는 언더플로우가 발생되면 실행 에러가 발생할 것 같지만, 그렇지는 않고,
해당 정수 타입의 최소값 또는 최대값으로 되돌아간다.
예를 들어보자.
byte타입일 경우 최대값 127에서 1을 더하면 128이 되어 오버플로우가 발생하고, 연산 결과는 최소값인 -128이 된다.
그리고 다시 +1을 하면 -127이 된다.
byte var = 127;
var++; // var 에 +1
System.out.printIn(var); // -128
언더플로우의 경우에도 마찬가지이다.
🟩 논리 연산자
논리연산자에는 논리곱(&&), 논리합(||), 베타적 논리합(^), 논리 부정(!) 연산자가 있다.
하지만 이 파트에서는 &&와 &, ||와 |의 차이만 알아보고 가자.
결론부터 말하자면, &&, ||가 &, | 보다 더 효율적으로 동작한다.
&&는 앞의 피연산자가 false라면 뒤의 피연산자를 평가하지 않고 바로 false를 산출한다. 그러나,
&는 두 피연산자를 모두 평가해서 산출 결과를 낸다.
또 ||는 앞의 피연산자가 true라면 뒤의 피연산자를 평가하지 않고 바로 true를 산출하지만, | 는 두 피연산자를 모두 평가해서 산출 결과를 낸다.
🟩 비트 논리 연산자
비트 논리 연산자는 bit단위로 논리 연산을 수행한다.
0과 1이 피연산자가 되므로, 2진수 0과 1로 저장되는 정수 타입(byte, short, char, int, long)만 피연산자가 될 수 있고, 부동 소수점 방식을 사용하는 실수 타입(float, double)은 피연산자가 될 수 없다.
비트 논리 연산자에는 &(논리곱), |(논리합), ^(베타적 논리합), ~(논리부정)가 있다.
비트 논리 연산의 피연산자는 0과 1이고, 산출 결과또한 0과 1인데,
1은 true, 0은 false라고 생각하면 위의 논리 연산자와 차이가 없다.
비트논리 연산의 활용은 아래 블로그에서 다루었다.
https://kodong8774.tistory.com/200
The application of bitwise AND operation (비트 논리곱(&) 연산)
The bitwise AND operation with 255 is really helpful in keeping the lowest 8 bits and remeoves the negaitive sign bits added during int conversion. For example, A C program in Embedded System is trying to send some data to external java program. C has uint
kodong8774.tistory.com
( 추가적인 비트 이동 연산자에 대한 내용(비트가 어떻게 밀려서, 값이 나타내어 지는지 등등)은 "이것이 자바다(신용권, 임경균)(1권)"의 100p를 참고하도록 하자. )
🟩 삼항(조건) 연산자
삼항 연산자는 다음과 같은 형태로 생겼다.
피연산자 ? 피연산자 : 피연산자
총 3개의 피연산자를 가진다.
?앞의 피연산자에는 boolean 또는 조건식이 오므로 조건 연산자라고도 한다.
이 값이 true이면 콜론(:) 앞의 피연산자가 선택되고, false이면 콜론 뒤의 피연산자가 선택된다.
ex1)
int score = 85;
char grade = (score > 90 ? 'A' : 'B');
System.out.println(score + "점은 " + grade + "등급입니다");
// 출력) 85점은 B등급입니다
ex2)
int score = 60;
char grade = (score > 90 ? 'A' : ((score > 80) ? 'B' : 'C'));
System.out.println(score + "점은 " + grade + "등급입니다");
// 출력) 60점은 C등급입니다
🟩 연산자의 방향과 우선순위
이 파트는 간단하게 정리하고 넘어가자.
우선 순위가 같은 연산자들끼리 처리되는 순서에 대해서 이야기 해보자.
이 경우는 연산의 방향에 따라 달라진다고 한다.
대부분의 연산자는 왼쪽에서부터 오른쪽으로 연산을 수행한다.
ex) 100 * 2 / 3 % 5 \
이 예시의 연산에서는 우선 순위가 서로 같은 연산자들이다.
이 연산자들의 연산 방향은 왼쪽에서부터 오른쪽이다.
즉, 100 * 2가 제일 먼저 연산되어 200이 산출되고, 그 다음 200 / 3이 연산되어 66이 산출된다.
마지막으로 66 % 5가 연산되어 결과값이 1이 나온다.
하지만, 대입 연산자(=, +=, -=, ...)는 오른쪽에서 왼쪽으로 연산을 수행한다.
ex) a = b = c = 5;
이 연산식에서는 c = 5, b = c, a = b 순서로 실행된다.