int x = 5; int y = 10; int z = x + y; // 5(피연산자) +(연산자) 10(피연산자)
산술 연산자 : +, -, *, /, %(나머지), <<, >>
비교 연산자 : >, <, >=, <=, ==, !=
논리 연산자 : &&(그리고), ||(또는), !(Not)
대입 연산자 : =, ++, --
기타 연산자 : (type), ?, :, instance of
System.out.println(4 + 2); // 6 System.out.println(4 - 2); // 2 System.out.println(4 * 2); // 8 System.out.println(4 / 2); // 2 System.out.println(5 / 2); // 2 System.out.println(2 / 4); // 0 System.out.println(4 % 2); // 0 System.out.println(5 % 2); // 1
System.out.println(2 + 2 * 2); // * => 6 System.out.println((2 + 2) * 2); // 8 System.out.println(2 + (2 * 2)); // 6
int a = 20; int b = 10; int c; c = a + b; System.out.println(c); // 30 c = a - b; System.out.println(c); // 10 c = a * b; System.out.println(c); // 100 c = a / b; System.out.println(c); // 2 c = a % b; System.out.println(c); // 0
System.out.println(10 > 9); // 10이 9보다 크니? 응!(true) System.out.println(10 >= 9); // 10이 9보다 크거나 같니? 응!(true) System.out.println(10 < 9); // 10이 9보다 작니? 아니!(false) System.out.println(10 <= 9); // 10이 9보다 작거나 같니? 아니!(false) System.out.println(10 == 10); // 10이 10이랑 같니?(true) System.out.println(10 == 9); // 10이 9랑 같니?(false) System.out.println(10 != 10); // 10이 10이 아니니?(false) System.out.println(10 != 9); //10은 9가 아니니?(true)
논리 연산자(비교 연산의 결과값으로 받을 수 있는 boolean 값을 연결하는 연산자
조건을 연결하였을 때 boolean 값들을 조합하여 참(true) 또는 거짓(false) 값인 boolean 값을 출력
&&(AND), ||(OR), !(NOT)
boolean flag1 = true; boolean flag2 = true; boolean flag3 = false; System.out.println(flag1); // true System.out.println(flag2); // true System.out.println(flag3); // true
System.out.println(flag1 || flag2 || flag3); // true System.out.println(flag1 || flag2); // true
System.out.println(flag1 && flag2); // true System.out.println(flag1 && flag2 && flag3); // true
System.out.println((5 > 3) && (3 > 1)); // true && true => true System.out.println((5 > 3) && (3 < 1)); // true && false =>false
System.out.println((5 > 3) || (3 > 1)); // true || true => true System.out.println((5 > 3) || (3 > 1)); // true || false => true System.out.println((5 < 3) && (3 < 1)); // false || false => false
System.out.println(!flag1); // false System.out.println(!flag3); // true System.out.println(!(5 == 5)); // false System.out.println(!(5 == 3)); // true
변수를 바로 연산해서 그 자리에서 저장하는(대입하는) 연산자
=(기본연산자), +=, -=, *= ....(복합대입연산자)
++ : +=
-- : -=
int number = 10; number = number + 2; System.out.println(number); // 12 number = number -2; System.out.println(number); // 10 number = number * 2; System.out.println(number); // 20 number = number / 2; System.out.println(number); // 10 number = number % 2; System.out.println(number); // 0
number = 10; number += 2; // number = number + 2 System.out.println(number); // 12 number -= 2; // number = number - 2 System.out.println(number); // 12-2 = 10 number *= 2; // number = number * 2 System.out.println(number); // 10 * 2 = 20 number /= 2; // number = number / 2 System.out.println(number); // 20 / 2 = 10 number %= 2; // number = number % 2 System.out.println(number); // 10 % 2 = 0
number++; // number에 +1을 하고 대입해라 // ==> number = number + 1; // ==> number += 1; System.out.println(number); number--; // number에 -1을 하고 대입해라 System.out.println(number);
int a = 10; int b = 10; int val = ++a + b--; // ++a : a에 1을 더한 다음에 연산 실행 b : --가 없다고 생각하고 연산을 수행한 다음 b라는 값에 -1을 해줘라 System.out.println(a); // 11 System.out.println(b); // 9 System.out.println(val); // 21 System.out.println(); int a1 = 10; int b1 = 10; int val2 = ++a1 + --b1; System.out.println(a1); // 11 System.out.println(b1); // 9 System.out.println(val2); // 20
int intNumber = 93 + (int)98.8; System.out.println(intNumber); // 191 double doubleNumber = (double) 93 + 98.8; System.out.println(doubleNumber); // 191.8
비교연산자와 항상 함께 쓰임
비교연산자의 결과 : true or false -> 이 결과의 값에 따라 결정되는 무언가
조건 ? 참 : 거짓
int x = 1; int y = 9; boolean b = (x == y) ? true : false; System.out.println(b); // false // x가 y랑 다르니? 응!! String s = (x != y) ? "정답" : "거짓"; System.out.println(s); // 정답 int max = (x > y) ? x : y; System.out.println(max); // 9 int min = (x < y) ? x : y; System.out.println(min); // 1
- 피 연산자가 조건에 명시된 클래스의 객체인지 비교하여
- 맞으면 -> true
- 틀리면 -> false
- 산술 > 비교 > 논리 > 대입
- 연산자 여러개가 함께 있는 연산을 계산할 때는 우선 순위 존재
- 위 우선 순위에 따라서 최종적인 응답값이 결정됨
- 단, 괄호로 감싸주면 괄호안의 연산이 최우선으로 계산됨
int x = 2; int y = 9; int z = 10; **boolean result = x < y && y < z;** // 1. x < y 2. y < z, 3. && System.out.println(result); // true **result = x + 10 < y && y < z;** // 1. x + 10, 2. x + 10 < y, 3. y < z, 4. && System.out.println(result); // false **result = x + 2 * 3 > y;** // 1. 2 * 3, 2. x + (2 * 3), 3. x + (2 * 3) > y System.out.println(result); // false **result = (x + 2) * 3 > y;** // 1. (x + 2), 2. (x + 2) * 3, 3. (x + 2) * 3 > y System.out.println(result); // true
- 두 피연산자의 타입을 같게 일치시킴
(둘 중에 저장공간 크기가 더 큰 타입으로 일치)- 피연산자의 타입이 'int'보다 작은 'short' 타입이면 'int'로 반환
- 피연산자의 타입이 'long' 보다 작은 'int','short' 타입이면 'long'으로 변환
- 피연산자의 타입이 'float' 보다 작은 'long', 'int', 'short' 타입이면 'float'으로 변환
- 피연산자의 타입이 'double' 보다 작은 'float', 'long', 'int', 'short' 타입이면 'double'으로 반환
- 이처럼, 변수 여러개를 연산했을 때 결과값은 피연산자 중 표현 범위가 가장 큰 변수 타입을 가지게 됨
short x = 10; int y = 20; int z = x + y; System.out.println(z); // 30 long lx = 30L; // long 타입 변수는 접미사 L이 필수로 붙어야함 long lz = z + lx; float fx = x; float fy = y; float fz = z; System.out.println(lz); // 60 System.out.println(fx); // 10.0 System.out.println(fy); // 20.0 System.out.println(fz); // 30.0
- Bit의 자리수를 옮기는 것
- Byte를 8등분한게 Bit
- Bit는 0,1 둘 중의 하나의 갓만을 저장하는 컴퓨터가 저장(표현)가능한 가장 작은 단위
- 컴퓨터의 가장 작은 단위인 Bit이기 때문에 연산중에서 Bit 연산이 제일 빠름
- 0,1 값으로 산술연산을 하거나, 비교연산을 할 수 있지만 비트 연산을 통해 자리수를 옮길 수도 있음
- '<<'(왼쪽으로 자리수 옮기기), '>>'(오른쪽으로 자리수 옮기기)
- 0,1은 2진수 값이기 때문에
- 자리수를 왼쪽으로 옮기는 횟수만큼 2의 배수로 곱셈이 연산되는 것과 동일
- 자리수를 오른쪽으로 옮기는 횟수만큼 2의 배수로 나눗셈이 연산되는 것과 동일
System.out.println(3 << 2); // 12 System.out.println(3 << 1); // 6
3을 2진수로 표현 -> 11(2진수) -> 1100(오른쪽으로 2번 이동) -> 8 + 4 = 12
3을 2진수로 표현 -> 11(2진수) -> 110(오른쪽으로 1번 이동) -> 4 + 2 = 6