산술 연산자
대입 연산자, 부호 연산, 사칙 연산자, 복합 대입 연산자,
증감 연산자 & 감소 연산자, 관계 연산자 & 비교 연산자, 논리 연산자,
조건 연산자
산술 연산자
● 항(operand) : 연산에 사용되는 값
● 연산자(operator) : 항을 이용하여 연산하는 기호
● TIP. 높은 순위에 연산자 : 객체 안으로 들어가는 연산자 ( ), [ ], 낮은 순위에 연산자 : = - <-- 오른 쪽에서 왼쪽으로 계산
대입 연산자
● 변수에 다른 변수나 값을 대입하는 연산자
● 이항 연산자 중 우선순위가 가장 낮은 연산자들
● 왼쪽 변수(L value) = 오른쪽 변수(L value) 변수 또는 식, 값
// 산술 연산자-대입 연산자
package ch03;
public class MainText1 {
public static void main(String[] args) {
char myA = 'A';
char youerA = 'a';
// 변수를 활용해서 연산을 한다고 실제 변수 안에 들어가 있는 값이 변경되는 것은 아니다.
System.out.println((int) myA);
System.out.println((short) myA);
System.out.println(myA);
System.out.println("================");
// 즉, 값을 변경하려면 대입 연산자를 활용할 수 있다.
myA = 'B';
System.out.println(myA);
// 대입 연산자에 우선순위는 가장 낮다.
// 연산에 방향은 반드시 오른쪽에서 왼쪽으로 연산이 된다.
// <-----
// 우선순위 연산2 = 우선 순위 연산1
} // end of main
} // end of class
Console 보기
65
65
A
================
B
부호 연산자
● 단항 연산자
● 변수의 부호를 유지하거나(+) 바꿈(-)
● 실제 변수의 부호를 변경하려면 대입 연산자를 사용해야 함
// 산술 연산자_부호 연산자
package ch03;
public class MainText2 {
public static void main(String[] args) {
// 단항 연산자이다. // 부호 연산자. ( + , - )
int number = 10;
System.out.println(-number);
System.out.println(number);
// 부호 연산자는 메모리 공간에 접근해서 값을 변경하는 것은 아니다.
// 실제 값을 변경하려면 대입 연산자를 사용하면 된다.
System.out.println("======== 문제 ========");
// 문제1. number 변수에 접근해서 현재 값 양수 10을 -10으로 변경하는 코드를 작성해 보세요.
// 단, R value 리터럴 값 대신 변수를 활용하시오.
number = -number;
// 문제2. 그 결과를 출력하시오.
System.out.println(number);
} // end of main
} // end of class
Console 보기
-10
10
======== 문제 ========
-10(IF단문 IF ELSE 구문
사칙 연산자
연산자 | 기능 | 연산 예 |
+ | 두 항을 더 합니다. | 5 + 3 |
- | 앞에 있는 항에서 뒤에 있는 항을 뺍니다. | 5 - 3 |
* | 두 항을 곱합니다. | 5 * 3 |
/ | 앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구합니다. | 5 / 3 |
% | 앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구합니다. | 5 % 3 |
// 산술 연산자_사칙 연산자
package ch03;
public class MainTest3 {
// 메인 함수 - 코드의 시작점 : (메인 스레드)
public static void main(String[] args) {
// 산술 연산자 연습
int number1 = 5 + 3;
int number2 = 5 - 3;
int number3 = 5 * 3;
int number4 = 5 / 4; // 소수점 발생
int number5 = 5 % 3;
System.out.println(number1);
System.out.println(number2);
System.out.println(number3);
System.out.println(number4);
System.out.println(number5);
System.out.println("======== 문제 ========");
// 문제1. (12 + 3) / 3 값을 화면에 출력하시오.
int number6 = (12 + 3) / 3;
System.out.println((12 + 3) / 3); // 반복문으로(자주 사용되는 함수) 출력
// 아래와 같이 간단하게도 출력이 가능하며 이와 같이 다양한 변수로 값을 변환할 수 있다.
int a = 12, b = 3;
System.out.println((12 + 3) / 3);
System.out.println((a + b) / b);
System.out.println(number6);
// 문제2. (25 % 2 ) 값을 화면에 출력하시오.
int number7 = (25 % 2);
System.out.println(number7);
// 아래와 같이 간단하게도 출력이 가능하며 이와 같이 다양한 변수로 값을 변환할 수 있다.
System.out.println((25 % 2));
System.out.println("================");
double number11 = (int) (5.0 / 4.0);
System.out.println(number11);
// 소수점 없이 정수로 강제 항 변환을 사용 시 앞에 int 과 () 사용하여 처리한다.
} // end of main
} // end of class
Console 보기
8
2
15
1
2
======== 문제 ========
5
5
5
5
1
1
================
1.0
복합 대입 연산자
● 대입 연산자와 다른 연산자가 함께 쓰임
연산자 | 기능 | 연산 예 |
+= | 두 항의 값을 더해서 왼쪽 항에 대입한다. | num1 = num1 + 2; 와 num1 += 2; 값이 같음 |
-= | 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입한다. | num1 = num1 - 2; 와 num1 -= 2; 값이 같음 |
*= | 두 항의 값을 곱해서 왼쪽 항에 대입한다. | num1 = num1 * 2; 와 num1 *= 2; 값이 같음 |
/= | 왼쪽 항을 오른 쪽 항으로 나누어 그 몫을 왼쪽 항에 대입한다. | num1 = num1 / 2; 와 num1 /= 2; 값이 같음 |
%= | 왼쪽 항을 오른 쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입한다. | num1 = num1 % 2; 와 num1 %= 2; 값이 같음 |
// 산술 연산자_복합 대입 연산자
package ch03;
public class MainTest4 {
public static void main(String[] args) {
// 대입 연산자와 다른 연산자랑 함께 쓰인다.
int num1 = 1;
// num1 = num1 + 10;
num1 += 10;
System.out.println(num1);
int num2 = 1;
num2 = 10;
// num2 = num2 + 100;
num2 += 100; // 위에 내용을 간소화한 것.
System.out.println(num2);
System.out.println("======== 문제 ========");
int num3 = 1;
// 문제1. num3 -= 10;
// 반대로 풀어서 코드를 작성해 주세요.
num3 = num3 - 10;
System.out.println(num3);
// 문제2. num1 = num1 * 2;
// 위 내용을 복합 대입 연산자로 변경해 주세요.
num1 *= 2;
System.out.println(num1);
// 문제3. num2 = num2 / 2;
// 위 내용을 복합 대입 연산자로 변경해 주세요.
num2 /= 2;
System.out.println(num2);
// 문제4. = num2 % 2;
// 위 내용을 복합 대입 연산자로 변경해 주세요.
num2 %= 2;
System.out.println(num2);
} // end of main
} // end of class
Console 보기
11
110
======== 문제 ========
-9
22
55
1
증감, 감소 연산자
● 단항 연산자
● 변수의 값을 1 더하거나 1 뺄 때 사용
● ※ 연산자가 항의 앞에 있는가 뒤에 있는가에 따라 연산 시점과 결과가 달라짐
● ※ 문장(statement)의 끝(;)을 기준으로 연산 시점을 생각해야 함
연산자 | 기능 | 연산 예 |
++ | 항의 값에 1을 더한다. | val = ++num; // 먼저 num 값이 1 증가한 후 val 변수에 대입 val = num++; // val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 증가 |
-- | 항의 값에 1을 뺀다. | val = --num; // 먼저 num 값이 1 감소한 후 val 변수에 대입 val = num--; // val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 감소 |
// 산술 연산자_증감, 감소 연산자(단항 연산자)
package ch03;
public class MainTest5 {
public static void main(String[] args) {
// 증감 연산자 ++
int num1 = 1;
System.out.println(num1);
// 현재 num1 에는 1 이라는 값이 담겨져 있다.
// num++1;
num1++;
System.out.println(num1);
// 변수에 접근해서 값을 오직 더하기 1 한다.
// num1 = 2; 같음
// System.out.println(num1);
// num1 = num1 + 1; 같음
// System.out.println(num1);
// num1 += 1; 같음
// System.out.println(num1);
// num1++; <-- 주의할 점 - 증감 연산자는 오직 1을 더해준다. 2도 아니고 3도 아닌 "1" 증가됨.
// 감소 연산자 --
// 변수에 접근해서 값을 오직 빼기 1 한다.
// num2--; <-- 주의할 점 - 감소 연산자는 오직 1을 빼준다. 2도 아니고 3도 아닌 "1" 감소됨.
System.out.println("======== 문제 ========");
int num2 = 1;
System.out.println(num2);
// num2 라는 메모리 공간 안에 0 될 수 있는 코드 방식을 4가지로 다 작성해세요.
// 첫 번째 num2 = 0;
// 두 번째 num2 = num2 - 1;
// 세 번째 num2 -= 1;
// 네 번째
num2--;
System.out.println(num2);
} // end of main
} // end of class
Console 보기
1
2
======== 문제 ========
1
0
// 산술 연산자_증감, 감소 연산자(단항 연산자)
package ch03;
public class MainTest5_1 {
public static void main(String[] args) {
// 증감 연산자 ++ 표시를 앞에다가 작성해서 연습해 보자.
// 감소 연산자 -- 표시를 앞에다가 작성해서 연습해 보자.
int num1 = 10;
int num2 = 0;
System.out.println("======== 문제 ========");
// 문제 1. num1에 더하기 1 하는 코드를 3가지 방식으로 작성해 주세요.
// 첫 번째 num1 += 1;
// 두 번째 num1 = num1 + 1;
// 세 번째
++num1;
System.out.println(num1);
// 문제 2. num2에 빼기 1 하는 코드를 3가지 방식으로 작성해 주세요.
// 첫 번째 num2 -= 1;
// 두 번째 num2 = num1 - 1;
// 세 번째
--num2;
System.out.println(num2);
} // end of main
} // end of class
Console 보기
======== 문제 ========
11
-1
// 산술 연산자_증감, 감소 연산자(단항 연산자)
package ch03;
public class MainTest5_2 {
public static void main(String[] args) {
// 증감, 감소 - 모양 : 변수 기준으로 앞에 사용, 뒤에 사용(오직 1을 더하거나 오직 1을 빼거나)
// 연산자가 (항의 앞에 있는가) vs (뒤에 있는가)에 따라 연산 시점과 결과가 달라짐
System.out.println("======== 문제 ========");
// 문제1. 증감 연산자가 앞에 올 경우
int num1 = 10;
System.out.println(num1);
++num1;
System.out.println(num1);
// 문제2. 증감 연산자가 뒤에 올 경우
int num2 = 10;
System.out.println(num2);
num2++;
System.out.println(num2);
// ※응용 문제※
// 문제3. 감소 연산자 앞에 올 경우
int num31 = 10;
int num32;
num32 = --num31;
System.out.println(num32);
// 문제4. 감소 연산자 뒤에 올 경우
int num41 = 10;
int num42;
num42 = num41--;
System.out.println(num42);
} // end of main
} // end of class
Console 보기
======== 문제 ========
10
11
10
11
9
10
관계 연산자 & 비교 연산자
● 이항 연산자
● 연산의 결과가 true(참), false(거짓)으로 반환됨, 비교연산자라고도 함
● 조건문, 반복문의 조건식으로 많이 사용됨
연산자 | 기능 | 연산 예 |
> | 왼쪽 항이 크면 참을, 아니면 거짓을 반환한다. | num > 3; |
< | 왼쪽 항이 작으면 참을, 아니면 거짓을 반환한다. | num < 3; |
>= | 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓을 반환한다. | num >= 3; |
<= | 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓을 반환한다. | num <= 3; |
== | 두 개 항의 값이 같으면 참, 아니면 거짓을 반환한다. | num == 3; |
!= | 두 개 항이 다르면 참, 아니면 거짓을 반환한다. | num != 3; |
// 산술 연산자_관계 연산자, 비교 연산자
package ch03;
public class MainTest6 {
public static void main(String[] args) {
// 관계 연산자, 비교 연산자
// 관찰에 결과가 참, 거짓을 판별할 때 사용한다.
// 결과는 오직 true, false 로 반환이 된다.
// 왼쪽 항에서 등호를 주어로 생각하기.
boolean value1 = 5 > 3;
boolean value2 = 5 < 3;
boolean value3 = 5 == 1;
System.out.println(value1);
System.out.println(value2);
System.out.println(value3);
System.out.println("========");
boolean value4;
int num1 = 10;
int num2 = 50;
value4 = num1 < num2; // 결과 값이 true
// value4 = num1 > num2; // 결과 값이 false
System.out.println(value4);
System.out.println("====문제====");
// Q1. 21 보다 20 이 크다 결과 값을 참으로 표현하시오.
boolean value100 = 21 > 20;
System.out.println(value100);
// Q2. 21 보다 20 이 크다는 결과 값을 거짓으로 표현하시오.
boolean value102 = 21 < 20;
System.out.println(value102);
// Q3. value220 value221 이 아래와 같을 시 false로 반영해 출력하시오.
int value220 = 100;
int value221 = 100;
boolean v1 = value220 != value221;
System.out.println(v1);
} // end of main
} // end of class
Console 보기
true
false
false
========
true
====문제====
true
false
false
논리 연산자
● 관계 연산자와 혼합하여 많이 사용됨
● 연산의 결과가 true(참), false(거짓)으로 반환됨
● 논리 연산에서 모든 항이 실행되지 않는 경우
- 논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true
즉, 앞의 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음
- 논리 합(||)은 두 항의 결과가 모두 false일 때만 결과가 false
즉, 앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음
연산자 | 기능 | 연산 예 |
&& (논리 곱) |
두 항이 모두 참인 경우에만 결과 값이 참 그렇지 않은 경우는 거짓 |
booleanval = (5 > 3) && (5 > 2); TURE TURE 결과 값은 : 참 |
|| (논리합) |
두 항중 하나의 항만 참이면 결과 값은 참 두 항이 모두 거짓이면 결과 값은 거짓 |
booleanval = (5 > 3) || (5 < 2); TURE FALSE 결과 값은 : 참 |
! (부정) |
단항 연산자로 참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꿔줌 |
booleanval =! (5 > 3); TURE가 답이나 반대의 값을 산출함 결과 값은 : 거짓 |
// 산술 연산자_논리 연산자(논리곱, 논리합)
package ch03;
public class MainTest7 {
public static void main(String[] args) {
// 핵심 정리
// 논리 연산자 ( &&, || ) 엠퍼센트, 버티컬 바
// 관계 연산자와 혼합하여 많이 사용한다.
// 연산에 결과는 true, false 반환된다.
int num1 = 10;
int num2 = 20;
// 논리 곱은 모든 결과 값이 참이어야 참이 나온다. true
// 하나라도 거짓이 나오면 무조건 거짓이 나온다. false
boolean flag1 = (num1 > 0) && (num2 > 0);
boolean flag2 = (num1 > 0) && (num2 < 0);
boolean flag3 = (num1 < 0) && (num2 < 0);
System.out.println(flag1);
System.out.println(flag2);
System.out.println(flag3);
// 결론
// 논리 곱에서 하나라도 거짓이 있으면 연산에 결과는 false 이다.
System.out.println("========");
// 논리 합(||)
// 논리 합에서는 하나라도 참이 있으면 연산에 결과는 true 이다.
flag1 = (num1 < 0) || (num2 > 0);
System.out.println(flag1);
// flag2 = T || T
// flag3 = T || F
// flag4 = F || F
} // end of main
} // end of class
Console 보기
true
false
false
========
true
// 산술 연산자_논리 연산자(논리곱, 논리합, 부정)
package ch03;
public class MainTest7_1 {
public static void main(String[] args) {
int num1 = 5;
int i = 0;
boolean value = ((num1 = 1 + 10) < 10) && ((i = i + 2) < 10);
// (11 < 10 = 사실) && (2 < 10 = 사실) = 사실
System.out.println(value);
System.out.println(num1); // 11
System.out.println(i); // 0
System.out.println("========");
boolean value2 = ((num1 = num1 + 1) > 0) || ((i = 100) < 2000);
// (12 > 0 = T) || (100 < 2000 = T)
System.out.println(num1);
System.out.println(value2);
System.out.println("========");
// 부정 ----> !
// 단항 연산자 참을 거짓으로, 거짓을 참으로 바꿔줌
System.out.println(value2);
// 사실을 참으로 바꿈
boolean not1 = !(5 > 3);
System.out.println(not1);
// 참을 거짓으로 바꿈
boolean not2 = !(5 < 3);
System.out.println(not2);
// 거짓을 참으로 바꿈
System.out.println("==== 값이 false 인데 거짓으로 만들기도 가능 ====");
boolean y1 = (30 < 300) && (100 < 10);
System.out.println(y1);
y1 = !false;
System.out.println(value2);
} // end of main
} // end of class
Console 보기
false
11
0
========
12
true
========
true
false
true
==== 값이 false 인데 거짓으로 만들기도 가능 ====
false
true
조건 연산자
● 조건식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 결과가 수행됨
● if (조건문)을 간단히 표현할 때 사용 할 수 있음
● 조건 연산자 = 삼항 연산자
연산자 | 기능 | 연산 예 |
조건식 ? 결과1 : 결관2; | 조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택된다. | int num = (5> 3) ? 10 :20; |
// 산술 연산자_조건 연산자
package ch03;
import java.util.Scanner;
public class MainTest8 {
// 코드에 시작점
public static void main(String[] args) {
// 삼항 연산자
// = 조건식? 결과1 : 결과2;
int num1 = (5 > 3) ? 10 : 20;
System.out.println(num1);
int num2 = (5 < 3) ? 10 : 20;
System.out.println(num2);
System.out.println("========");
System.out.println((5 < 3) ? 10 : 20);
// JDK가 만들어 놓은 도구
int max = 0;
System.out.println("입력 받은 두 수중 큰 수를 출력 하세요");
// 변수에 종류에는 가장 크게 딱 2가지만 존재한다.
// 1. 기본 데이터 타입
// 2. 참조 타입 -> 데이터 타입 / 이름 = 단 대문자로 시작했다.
// Scanner sc;
Scanner sc = new Scanner(System.in);
System.out.println("입력 1 : ");
int x = sc.nextInt();
System.out.println(" 입력 2 : ");
int y = sc.nextInt();
System.out.println("======== 문제 ========");
// 두 수를 비교해서 사용자가 입력한 값 중에 큰 수를 화면에 출력 하시오.
max = (x > y) ? x : y;
System.out.println("큰 숫자는 " + max + " 값 입니다. ");
// 풀이해석
// 삼항 연산자 - 조건 연산자
// 메모리 공간 호출 = 식을 만들어서 담을 예정
// 예시 max = ( ) ? 결과1 : 결과2 ;
// max = ( x > y) ? x:y;
// x 나 y 중에 큰 값이 max 변수에 담기게 된다.
// 문자열 + 정수 + 문자열 --> 문자열로 받아 드린다.
} // end of main
} // end of class
Console 보기
10
20
========
20
입력 받은 두 수중 큰 수를 출력 하세요
입력 1 :
'Java' 카테고리의 다른 글
[java] 제어 문_반복 문 (0) | 2023.07.26 |
---|---|
[java] 제어 문_조건 문 (0) | 2023.07.26 |
[java] 상수와 형 변환 (0) | 2023.07.25 |
[Java] 변수와 자료형 (0) | 2023.07.24 |
[java] 컴파일 시점 VS 런타임 시점 (0) | 2023.07.24 |