> 연산자 operator
변수의 값 변경/대입 시 사용
연산자에 따라 연산 대상 datatype이 정해져 있다
overflow/underflow 등 범위 벗어나는 연산은 결과에 불필요한 값이 저장된다
1. 단항 연산자 Unary Operator
피연산자(operand)가 하나인 연산자
1)증감 연산자 (++, --) : 변수의 앞/뒤에 붙어서 값을 하나 증가/감소 시킴 (ex. a++;)
증감연산자가 변수의 앞에 붙는 경우 - 전위연산자, 먼저 값을 증감 후 연산/대입
증감연산자가 변수의 뒤에 붙는 경우 - 후위연산자, 먼저 값을 연산/대입 후 증감
int i = 1;
int j = ++i; //i=2, j=i=2
System.out.println(i + " " + j); // 2 2
int x = 1;
int y = x++; // y=x=1, x=2
System.out.println(x + " " + y); // 2 1
int i = 1;
System.out.println(i++); // 1 //1출력, i=2
System.out.println(++i); // 3 //i=3, 3출력
int x = 1;
int y = (x++) + (x++) + 10; // 1 + 2 + 10 = 13
System.out.println(y); // 13
System.out.println(x); // 3
2)부호 연산자 (+, -) : 양수/음수 표현
int a = 5;
int b = -a;
System.out.println(b); // -5
3)비트 반전 연산자 (~) : 비트의 값 반전 (ex. 1010→0101)
byte b = 8; // 0000 1000
System.out.println(~b); // 1111 0111 = -9
4)논리 반전 연산자 (!) : 논리대수의 값 반전, 부정의 의미 (ex. true→false, false→true)
boolean b = true;
System.out.println(!b); // false
5)캐스트 연산자 ((type)) : datatype 바꿔줌
2. 2항 연산자 Binary Operator
피연산자가 2개인 연산자
(int형보다 크기가 작은 datatype은 모두 int형으로 자동 변환되어 연산, boolean형 제외)
1)산술 연산자 (+, -, *, /, %)
-나머지 연산: 몫(/) 나머지(%), 결과 항상 정수, 0으로 나누면 에러 발생
ex. 5/2=2, 5%2=1
2)비교 연산자 (<, >, <=, >=, ==, !=)
결과 값: 조건 만족 시 true, 그렇지 않으면 false
(비교되는 값들의 datatype이 다르면 크기가 더 큰 datatype에 맞추어 연산)
int a = 1;
int b = 2;
System.out.println(a == b); //false
System.out.println(a != b); //true
System.out.println(a < b); //true
int c = 35;
System.out.println(c % 2 == 0); //false, 짝수가 아니다
*문자열 비교 .equals()
두 문자열(String)이 서로 같은지 비교할 때, "==" 대신 "문자열 이름.equals(비교할 문자열 이름)" 을 사용
("=="를 사용해도 작동하지만 정확도가 떨어짐)
*문자열과 다른 객체 비교 - .contentEquals()
3)비트 연산자 (&, |, ^)
두 수의 2진수 값 비트 연산
- & (and, 비트곱) : 두 비트 모두 1이면 1, 하나라도 0이면 0 (ex. 0001 & 0101 = 0001)
- | (or, 비트합) : 두 비트 모두 0이면 0, 하나라도 1이면 1 (ex. 0001 | 0101 = 0101)
- ^ (xor, 배타적 논리합) : 두 비트가 다르면 1, 같으면 0 (ex. 0001 ^ 0101 = 0100)
int a = 5; // 0000 0101
int b = 3; // 0000 0011
System.out.println(a & b); // 0000 0001 = 1
System.out.println(a | b); // 0000 0111 = 7
System.out.println(a ^ b); // 0000 0110 = 6
4)비트 이동 연산자 (<<, >>)
왼쪽 항을 2진수로 변환, 오른쪽 항의 숫자만큼 왼쪽(<<)/오른쪽(>>)으로 이동
int a = 33; // 0000 0010 0001
System.out.println(a << 3); // 0001 0000 1000 = 264
5)논리 연산자 (&, |, &&, ||)
boolean 형 변수 연산자
- & : 모두 true → true
- | : 하나라도 true → true
- && : 왼쪽 항이 false → false (오른쪽 항 고려X)
(왼쪽 항이 ture이면 &와 동일)
- || : 왼쪽 항이 true → true (오른쪽 항 고려X)
(왼쪽 항이 false면 |와 동일)
* &&, || : short circuit operator
* &보다 &&를 쓰는 것이 보편적!
int a = 10;
int b = 20;
// if (조건식)이 true이면 if블럭 실행, false이면 else블럭 실행
if(a != 10 && ++b == 21) { // false && true = false
System.out.println("참");
} else {
System.out.println("거짓");
}
//거짓
*대입 연산자 Assignment Operator
기본형 = 외에 +=, -=, *=, /=, %= 존재
int a = 3;
a += 2; // a = a + 2 //5
a -= 2; // a = a - 2 //3
a *= 2; // a = a * 2 //6
a /= 2; // a = a / 2 //3
a %= 2; // a = a % 2 //1
*random 값 받기
Math.random() : 0 ≤ n < 1 인 임의의 실수 값 n
Math.random()*100 : 0 ≤ n < 100 인 임의의 실수 값 n
(int)(Math.random()*100) + 1 : 1≤ n < 101 (1≤ n ≤100) 인 임의의 정수 값 n
ex. -5~5 사이의 정수? 5 - (int)(Math.random()*11)
3. 3항 연산자
피연산자가 3개인 연산자
구조: < 조건식 ? 연산식1 : 연산식2 >
조건식이 true→연산식1 / false→연산식2
*조건식은 boolean형
int a = (int)(Math.random()*10);
int b = (int)(Math.random()*10);
System.out.println(a);
System.out.println(b);
int c = a < b ? a : b; //c에 a와 b 중 더 작은 값 대입
//a가 b보다 더 작은가? true -> c = a, false -> c = b
System.out.println(c);
★계산순서 : 소괄호 > 단항 > 이항 > 삼항 > 대입
'course 2021 > JAVA' 카테고리의 다른 글
day06 - array insert, update, delete (0) | 2021.08.24 |
---|---|
day05 - control statement (2) | 2021.08.18 |
day04 - array, scanner (1) | 2021.08.18 |
day02 - variable, datatype, type casting (0) | 2021.08.12 |
day01 - basic (0) | 2021.08.11 |