📌 컴퓨터 연산원리
- 값(literal)은 같은 타입의 변수에만 대입할 수 있다.
- 같은 타입끼리만 연산할 수 있다. (ex. int 와 int의 연산)
- 같은 타입간 연산결과값의 타입 또한 동일하다.
📌 항과 연산자
- 항 (operand) : 연산에 사용되는 값
- 연산자 (operator) : 항을 이용하여 연산하는 기호
📌 항의 개수에 따른 연산자 구분
#1️⃣ 연산자 우선순위
#2️⃣ 대입연산자 = , 좌항 공간에 우항의 값을 대입한다.
- 변수에 값을 대입 하는 연산자
- 연산의 결과를 변수에 대입
- 우선 순위가 가장 낮은 연산자
- 왼쪽 변수(lvalue)에 오른쪽 변수(값)(rvalue)를 대입
2 - 1. 변수 = 값
int a = 1; // 변수 a에 1이 대입된다.
2 - 2. 변수 = 표현식
int a = 1 + 2; // 변수 a에 1+2를 하여 3이 대입된다.
2 - 3. 변수 = 변수 = 변수 ...= 값(혹은 표현식)
int a, b, c;
a = b = c = 100 // a, b, c 변수에 동일하게 100이 대입된다
#3️⃣ 증감연산자
- 단항 연산자
- 1만큼 더하거나 1만큼 뺄 때 사용하는 연산자
- 항의 앞/뒤 위치에 따라 연산의 결과가 달라짐에 유의
3 - 1. 전위증감연산자 ++a , --a : 먼저 1 증감후에 인접연산처리
int c = 10;
++c; // c = c + 1;
System.out.println(c);
--c; // c = c - 1;
System.out.println(c);
// 결과 11 , 9
int k = 1;
System.out.println(++k + 1); // 인접연산 , 2 + 1
System.out.println(k); // 2
3 - 2. 후위증감연산자 a++ , a-- : 먼저 인접연산에 사용된 후 1증감처리
int k = 1;
System.out.println(k++ + 1); // 인접연산 , 1 + 1
System.out.println(k); // 2
int m = 3;
int n = m++; // 대입하는걸 먼저 사용하고 후에 1증가
System.out.println(m); // 4
System.out.println(n); // 3
💡 단독으로 쓰일 때는 전위,후위 상관 X
++a;
a++;
--a;
a--;
#4️⃣ 산술 연산자
- 사칙연산에 사용되는 연산자
- %는 나머지를 구하는 연산자 → 숫자 n의 나머지는 0 ~ n-1 범위의 수 → 특정 범위 안의 수를 구할 때 종종 사용
- 나누기, 나머지, 곱하기는 더하기,빼기보다 우선순위가 높다.
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
int n = sc.nextInt();
System.out.println("짝수인가? " + (n % 2 == 0)); // 입력받은 정수 나누기 2의 나머지가 0이면 true
#5️⃣ 비교 연산자
- 이항 연산자
- 연산의 결과가 true (참), false (거짓)으로 반환됨
5 - 1. 동등성, 동일성 비교
s1 == s2 동일성비교 : 값비교
s1.equals("비교문자열") 동등성비교 : 주소값에 있는 값비교
#6️⃣ 논리 연산자
- 관계 연산자와 혼합하여 많이 사용 됨
- 연산의 결과가 true(참), false(거짓)으로 반환됨
- [a && b, a || b ]→boolean으로 평가되는 조건식
6 - 1. a && b - a, b 모두 true일때, true를 반환
6 - 2. a || b - a, b 중에 하나라도 true라면, true를 반환
6 - 3. 단락 회로 평가 (short circuit evaluation)
- 논리 곱 &&은 두 항이 모두 true일 때만 결과가 true → 앞의 항이 false 이면 뒤 항의 결과를 평가하지 않아도 false임
- 논리 합 ||은 두 항이 모두 false 일 때만 결과가 false → 앞의 항의 true이면 뒤 항의 결과를 평가하지 않아도 true임
📌 우항을 검사하지 않았을 때
int x = 1;
int y = 1;
System.out.println(x == 1 && ++y == 2); // 좌항이 참이기 때문에 y까지 실행함.
System.out.printf("x = %d, y = %d", x, y);
// 결과 x = 1 , y = 2
int x = 1;
int y = 1;
System.out.println(x != 1 && ++y == 2); // 좌항이 거짓이기 때문에 y까지 실행하지않음.
System.out.printf("x = %d, y = %d", x, y);
// 결과 x = 1 , y = 1
#7️⃣ 삼항연산자 (조건식) ? (참일 때 값) : (거짓일 때 값)
int a = 100;
String s = (a > 50) ? "a는 50보다 크다" : "a는 50보다 작다";
System.out.println(s);
// a는 50보다 크다
<사용자에게 입력받은 정수가 홀수 / 짝수 인지 출력>
// 100은 짝수입니다.
Scanner sc = new Scanner (System.in);
n = sc.nextInt();
Strint nType = (n % 2 == 0) ? "짝" : "홀"
System.out.printf("%d 은/는 %s수입니다.", ntype);
📌 이중 삼항 연산자도 가능
a < b ? a-- : (b==0 ? a++ : b--);
#8️⃣ 복합대입연산자
- 대입 연산자와 다른 연산자를 함께 사용함
- 프로그램에서 자주 사용하는 연산자
int a = 5;
a += 5; // a = a + 5
System.out.println(a) // 10
a -= 3;
System.out.println(a) // 7
#9️⃣ 부호 연산자
: 변수에 '-' 연산자만 사용한다고 해서 값 자체가 음수로 바뀌는 것은 아니다.
int num = 10;
System.out.println(+num); // 값이 10 그대로 출력됨
System.out.println(-num); // 값 10에 -가 붙서어 -10이 출력되지만 num 값이 실제로 바뀌지는 않음
System.out.println(num); // 값이 10 그대로 출력됨
num = -num; // num 값을 음수로 바꿔서 다시 num 에 대입함
System.out.println(num); //값 -10이 출력됨
'📚Programming > Java' 카테고리의 다른 글
[자바] Random클래스 (0) | 2022.09.16 |
---|---|
[자바] String클래스 (0) | 2022.09.16 |
[자바] Scanner (1) | 2022.09.16 |
[자바] 출력메소드 (1) | 2022.09.16 |
[자바] 형변환 (0) | 2022.09.16 |