Java

[Java 기초 공부 04] 연산자

또또윤 2021. 3. 20. 10:03

 

오늘은 연산자에 대해 정리해보았다.

연산자에는

사칙연산, 증감연산자, 비교연산자, 논리연산자

등이 있다.

 

 

 

사칙연산

- 우리가 흔히 알고있는 더하기, 빼기, 곱하기, 나누기가 있다.

+ 두 수를 더한다. / 두 수를 나눈다.
(정수는 몫반환)
- 두 수를 뺀다. % 나머지를 반환
* 두 수를 곱한다.    

 

 

 

증감연산자

- 변수를 1씩 증가 또는 감소시키는 것을 단항으로 표현하는 방법.

- 대입연산자 ( = ) 없이도 자신의 값이 바뀐다.

 

int n = 10;
n = n+1;
n += 1; // 복합연산자. n = n+1과 같은의미.(더하고 변수에 대입한다)

 

- 보통 파이썬에서는 위처럼 n += 1의 형식으로 많이 써주었지만 자바에서는 증감연산자를 사용할 수 있다.

 

++n; // 11 : 전위증감연산자 - n에 1을 더한 값을 출력한다. 속도 빠름.
n++; // 10 : 후위증감연산자 - n을 출력한 후 1을 더한다. 전위보다 느리다.

 

- 그렇다면 대입연산자 식과 증감연산자 식의 차이는 무엇일까?

  -> 의미는 같지만, 속도의 차이가 있다고 한다.

 

** 증감연산자를 사용시 아래처럼 코드를 짜면 안된다고 하니 주의하자

 

System.out.println(++n + ++n); 

 

 

 

 

비교연산자

- 결과가 논리형으로 나오며, 논리연산자와 함께 사용한다.

a > b a는 b보다 크다. a <= b a는 b보다 같거나 작다
a >= b a는 b보다 같거나 크다. a == b a는 b와 같다
a < b a는 b보다 작다. a != b a는 b가 아니다.

- 보통 변수가 왼쪽에 오도록 한다. ( 0 <= a 보다는 a >= 0의 형식이 되도록 한다.)

 

 

 

논리연산자

- 교환법칙이 성립하지 않으므로 A와 B의 순서가 중요하다.

- 계산 우선순위는 and(&&)가 or(||)보다 높다.

A && B and
A와 B 모두 만족하면 true
A || B or
A 또는 B중 하나만 만족하면 true

 

- 예시1

 

int a=1, b=-1, c=0;
boolean bool = ++a > 0 && ++b > 0 && ++c > 0;
// a = 2, b = 0, c = 0
//c는 뭔지몰라서 연산할 수 없으므로 c는 0이다.
// 풀이방법
// (++a > 0 && ++b > 0) -> &&는 앞이 참이면 뒤도 확인, (T && F) = F
// F && ++c -> 앞이 F이므로 뒤는 볼필요도 없음.
System.out.println("bool : " + bool); // false
System.out.println("a :" + a + ", b : " + b + ", c : " + c); 

 

 

- 예시2

 

int a2=1, b2 = -1, c2 = 0;
boolean bool2 = a2++ > 0 || b2++ > 0 || c2++ > 0;
// a = 1 , b = -1, c = 0
// 풀이방법
// a2++ > 0 || b2++ > 0 -> T
// T || c2++ > 0 -> T
System.out.println("bool2 : " + bool2); // true
System.out.println("a2 :" + a2 + ",b2 : " + b2 + ", c2 : " + c2); 

 

 

- 예시3

 

int a3=1, b3 = -1, c3 = 0;
boolean bool3 = a3++ > 0 || b3++ > 0 && c3++ > 0;
// a = 2, b = -1, c = 0
// b3++ > 0 && c3++ > 0 먼저 계산 -> F
// a3++ > 0 || F -> T
System.out.println("bool3 : " + bool3); // true
System.out.println("a3 :" + a3 + ", b3 : " + b3 + ", c3 : " + c3);

 

- 논리연산자를 응용하여 간단하게 true이면 a를 false이면 b를 반환하게 할 수 있다.

*** (조건) ? a : b 를 기억하자.

 

int a = 30;
int b = 20;
System.out.println((a>b)? a : b); // 30