728x90
산술 연산자
자바 산술 연산자
연산자 | 설명 | 사용 예 | 결과 |
+ | 더하기 | 5 + 2 | 7 |
- | 빼기 | 5 - 2 | 3 |
* | 곱하기 | 5 * 2 | 10 |
/ | 나누기의 몫 | 5 / 2 | 2 |
% | 나누기의 나머지 | 5 % 2 | 1 |
public class Ex01_Arithmetic
{
public static void main(String[] args)
{
int num1 = 7;
int num2 = 3;
System.out.println("num1 + num2 = " + (num1 + num2));
System.out.println("num1 - num2 = " + (num1 - num2));
System.out.println("num1 * num2 = " + (num1 * num2));
System.out.println("num1 / num2 = " + (num1 / num2));
System.out.println("num1 % num2 = " + (num1 % num2));
}
}
대입 연산자와 복합 대입 연산자
대입 연산자
int num = 100;
int myScore = 50 + 20;
복합 대입 연산자
연산자 | 설명 |
a += b | a = a + b |
a -= b | a = a - b |
a *= b | a = a * b |
a /= b | a = a / b |
a %= b | a = a % b |
public class Ex02_Assignment
{
public static void main(String[] args)
{
short num = 10;
num += 77L; // 사람의 강제 형 변환 필요하지 않음
System.out.println(num);
num = (short)(num + 77L); // 형 변환 필요
System.out.println(num);
}
}
부호 연산자와 증감 연산자
연산자 | 사용 예 | 설명 |
+ | +x | 부호 유지 (의미 없는 연산) |
- | -x | 부호 반전 |
++ | ++x | 다른 연산 전 x 값을 증가시킴 |
x++ | 다른 연산 후 x 값을 증가시킴 | |
-- | --x | 다른 연산 전 x 값을 감소시킴 |
xx-- | 다른 연산 후 x 값을 감소시킴 |
public class Ex03_PlusMinusSign
{
public static void main(String[] args)
{
short num1 = 5;
System.out.println(+num1); // 결과적으로 불필요한 +연산
System.out.println(-num1); // 부호를 바꿔서 얻은 결과를 출력
System.out.println(num1); // num1 의 값은 변하지 않음
short num2 = 7;
short num3 = (short)(+num2); // (1) 형 변환 하지 않으면 오류 발생
short num4 = (short)(-num2); // (2) 형 변환 하지 않으면 오류 발생
System.out.println(num3);
System.out.println(num4);
}
}
(1), (2) : int로 형변환이 됨
public class Ex04_PrefixPostfix
{
public static void main(String[] args)
{
int num = 10;
System.out.println(++num); // num의 값 하나 증가 후 출력
System.out.println(num); // num의 값이 증가되어 있음
System.out.println(num++); // 출력 후에 값이 증가
System.out.println(num); // 출력 후에 값이 증가
}
}
(증감연산자는 반복문에서 단독으로 사용하는 것이 좋음)
비교 연산자 (관계 연산자)
int x = 2;
int y = 1;
연산자 | 사용 예 | 설명 | 결과 |
== | x == y | x와 y는 같다 | false |
!= | x != y | x와 y는 같지 않다 | true |
> | x > y | x가 y보다 크다 | true |
>= | x >= y | x가 y보다 크거나 같다 | true |
< | x < y | x가 y보다 작다 | false |
<= | x <= y | x가 y보다 작거나 같다 | false |
public class Ex05_Compare
{
public static void main(String[] args)
{
System.out.println("2 >= 1 : " + (2 >= 1));
System.out.println("2 <= 1 : " + (2 <= 1));
// 비교 연산시에도 형 변환이 일어남
System.out.println("1.0 == 1 : " + (1.0 == 1));
System.out.println("1.0 != 1 : " + (1.0 != 1));
}
}
1.0과 1은 실수와 정수인데 결과값이 출력됨
→ 실수형으로 자동 형변환이 이뤄진 다음 비교 연산을 수행했기 때문
논리 연산자
- 두 명제가 모두 참이면 논리곱은 참
- 두 명제 중 하나라도 참이면 논리합은 참
- 참의 부정은 거짓, 거짓의 부정은 참
연산자 | 기능 |
&& (논리곱, And) |
두 항이 모두 참이면 결괏값은 참 그렇지 않은 경우 거짓 |
|| (논리합, Or) |
두 항 중 하나의 항이라도 참이면 결괏값은 참 두 항이 모두 거짓이면 결괏값은 거짓 |
! (부정, Not) |
값이 참인 경우는 거짓으로 바꿈 값이 거짓인 경우는 참으로 바꿈 |
A | B | A && B | A || B | !A |
true | true | true | true | false |
true | false | false | true | false |
false | true | false | true | true |
false | false | false | false | true |
public class Ex06_Logical
{
public static void main(String[] args)
{
int num1 = 11;
int num2 = 22;
boolean result;
result = (num1 > 1) && (num1 < 10);
System.out.println("1 초과 10 미만인가? " + result);
result = ((num2 % 2) == 0) || ((num2 % 3) == 0);
System.out.println("2 또는 3의 배수인가? " + result);
}
}
논리 연산자 주의점
Short-Circuit Evaluation (최단 거리 평가, SCE)
: 연산의 효율 및 속도의 향상을 위해 불필요하 연산을 수행하지 않는 기능
public class Ex07_ShortCircuitEvaluation
{
public static void main(String[] args)
{
int x = 0;
int y = 0;
boolean result;
result = ((x = x + 1) < 0) && ((y = y + 1) > 0);
System.out.println("result = " + result);
System.out.println("x = " + x);
System.out.println("y = " + y + '\n');
result = ((x = x + 1) > 0) || ((y = y + 1) > 0);
System.out.println("result = " + result);
System.out.println("x = " + x);
System.out.println("y = " + y);
}
}
조건 연산자
조건식 ? 참일 때 실행 : 거짓일 때 실행;
int myclass = (age>20) ? 2 : 1;
public class Ex08_Condition
{
public static void main(String[] args)
{
int num1 = 50;
int num2 = 100;
int big = (num1 > num2) ? num1 : num2;
System.out.println("큰 수 : " + big);
int diff = (num1 > num2) ? (num1 - num2) : (num2 - num1);
System.out.println("두 수의 차 : " + diff);
}
}
단항·이항·삼항 연산자
- 단항 연산자 : ++x, y--에서 ++, --는 하나의 피연산자만으로 이루어진 식으로 연산을 수행
- 이항 연산자 : x + y에서 + 연산자는 피연산자를 두 개 가지고 식을 구성
- 삼항 연산자 : 항이 세 개 있어야 함 (조건 연산자)
1항 ? 2항 : 3항;
연산자 우선순위
우선순위 | 종류 | 연산자 |
1 | . [] () | |
2 | 단항 | ++ -- ! + - |
3 | 산술 | * / % |
4 | 산술 | + - |
5 | 비교 | < <= > >= |
6 | 관계 | == != |
7 | 논리곱 | && |
8 | 논리합 | || |
9 | 조건 | booleanExpression ? exp1 : exp2 |
10 | 대입 | = += -= *= /= %= |
public class Ex09_Order
{
public static void main(String[] args)
{
System.out.println(); // println을 이용한 줄바꿈
System.out.print("\n"); // 특수 문자를 이용한 줄바꿈
System.out.println("--------------------");
int num = 5;
System.out.print(num + '\n'); // (1) 기본 자료형끼리는 산술 연산
System.out.println("--------------------");
System.out.print(num + "\n");
System.out.println("3 >= 2 : " + (3 >= 2));
//System.out.println("3 >= 2 : " + 3 >= 2);
}
}
(1) '\n'은 문자형(기본 자료형)으로 아스키코드 10에 해당 ("\n"은 스트링 객체, 글자들 → 산술 연산 불가능)
'JAVA > 이재환의 자바 프로그래밍 입문' 카테고리의 다른 글
[Java] Ch.6 제어문 (1) | 2023.10.16 |
---|---|
[Java] Ch.5 콘솔 출력과 입력 (1) | 2023.10.13 |
[Java] Ch.3 변수, 상수, 자료형의 형변환 (0) | 2023.10.13 |
[Java] Ch.2 자료형 (0) | 2023.10.13 |
[Java] Ch.1 Hello Java World (0) | 2023.10.13 |