3.1 부호 / 증감 연산자
public class IncreaseDecreaseOperatorExampel {
public static void main(String[] args) {
int x = 10;
int y = 10;
int z;
x++;
++x;
System.out.println("x=" + x); // 12
System.out.println("----------------");
y--;
--y;
System.out.println("y=" + y); // 8
System.out.println("----------------");
z = x++; // = 도 연산자 z 에 x값을 넣고 x는 ++ 로 인해 1 추가
System.out.println("z=" + z); // 12
System.out.println("x=" + x); // 13
System.out.println("----------------");
z = ++x;
System.out.println("z=" + z); // 14
System.out.println("x=" + x); // 14
System.out.println("----------------");
z = ++x + y++;
System.out.println("z=" + z); // 23
System.out.println("x=" + x); // 15
System.out.println("y=" + y); // 9
}
3.2 산술 연산자
int result = num % 3; -> 0, 1, 2 중 한값 저장(나머지 값)
int result = num / 3; -> 몫 구하는 방법(정수 나누기 정수 == 정수)
public class ArithmeticOperatorExample {
public static void main(String[] args) {
byte v1 = 10;
byte v2 = 4;
int v3 = 5;
long v4 = 10L;
int result1 = v1 + v2;
System.out.println("result1: " + result1);
long result2 = v1 + v2 - v4;
System.out.println("result2: " + result2);
double result3 = (double) v1 / v2;
System.out.println("result3: " + result3);
int result4 = v1 % v2;
System.out.println("result4: " + result4);
}
}
3.3 오버플로우와 언더플로우
기대하는 값이 나오지 않는 경우 생각해볼 문제
오버플로우 : 최대값보다 큰 값을 저장하려고 하면 최대값을 벗어남
언더플로우 : 최소값 보다 작은 값을 저장하려고 하면 최소값을 벗어남
3.4 정확한 계산은 정수 연산으로
public class AccuracyExample {
public static void main(String[] args) {
int apple = 1;
double pieceUnit = 0.1;
int number = 7;
double result = apple - number*pieceUnit;
System.out.println("사과 1개에서 남은 양: " + result);
// 결과 값 = 사과 1개에서 남은 양: 0.29999999999999993
// 기댓 값 = 0.3
// 컴퓨터 계산에서 0.1을 정확하게 계산하지 못함 0.09999999999...
}
}
정확한 계산을 하기 위해서는 정수로 변경해서 진행해야함.
public class AuccracyExample2 {
public static void main(String[] args) {
int apple = 1;
int totalPieces = apple * 10;
int number = 7;
int result = totalPieces - number;
System.out.println("10조각에서 남은 조각: " + result);
System.out.println("사과 1개에서 남은 양: " + result/10.0);
}
}
3.5 나눗셈 연산 후 NaN과 Infinity 처리
5 / 0 -> 예외 발생
5 % 0 -> 예외 발생
5 / 0.0 -> infinity
5 % 0.0 -> NaN (Not a Number)
3.6 비교 연산자
public class CompareOperatorExample {
public static void main(String[] args) {
int num1 = 10;
int num2 = 10;
boolean result1 = (num1 == num2);
boolean result2 = (num1 != num2);
boolean result3 = (num1 <= num2);
System.out.println("result1 : " + result1);
System.out.println("result2 : " + result2);
System.out.println("result3 : " + result3);
char char1 = 'A';
char char2 = 'B';
boolean result4 = (char1 < char2);
System.out.println("result4 : " + result4);
int num3 = 1;
double num4 = 1.0;
boolean result5 = (num3 == num4);
System.out.println("result5 : " + result5);
float num5 = 0.1f;
double num6 = 0.1;
boolean result6 = (num5 == num6); // 0.1을 정확하게 표현할 수 없어서 에러
boolean result7 = (num5 ==(float)num5); // 이렇게 강제 변환해서 해결해야함
System.out.println("result6 : " + result6);
System.out.println("result7 : " + result7);
String str1 = "자바";
String str2 = "Java";
boolean result8 = (str1.equals(str2));
boolean result9 = (! str1.equals(str2));
System.out.println("result8 : " + result8);
System.out.println("result9 : " + result9);
String은 .equals()로 비교 해야한다.
3.7 논리 연산자
문자는 정수타입이다.
'A' 같은 경우 int 타입에 대입 가능함
public class LogicalOperatorExample {
public static void main(String[] args) {
// int charCode = 'A';
// int charCode = 'a';
int charCode = '5';
if((65<=charCode) && (charCode<=90)) {
System.out.println("대문자이군요");
}
if((97<=charCode) && (charCode<=122)) {
System.out.println("소문자이군요");
}
if((48<=charCode) && (charCode<=57)) {
System.out.println("0~9 의 숫자이군요");
}
// int value = 6;
int value = 7;
if((value%2 == 0) || (value%3 == 0)) {
System.out.println("2 또는 3의 배수이군요.") ;
}
boolean result = ((value%2 ==0)||(value%3==0));
if(!result) {
System.out.println("2 또는 3의 배수가 아니군요");
}
}
}
3.8 비트 논리 연산자 - 생략( 하드웨어 제어 부분에 필요함)
3.9 비트 이동 연산자 - 생략
3.10 대입 연산자
int result = 0;
result += 10; <---> result = result + 10;
같은 의미이지만 미세하게나마 좌측이 연산이 빠르다 왜냐면 연산자가 1개 (+=)<---> 2개( = , +) 이기 때문
public class AssignmentOperatorExample {
public static void main(String[] args) {
int result =0;
result += 10;
System.out.println("result = " + result);
result -= 5;
System.out.println("result = " + result);
result *= 3;
System.out.println("result = " + result);
result /= 5;
System.out.println("result = " + result);
result %= 3;
System.out.println("result = " + result);
}
}
Tip
int x = 1;
x++;
++x;
x+=1;
x = x+1; 4가지는 모두 같은 의미 1 더하는 것
3.11 삼항(조건) 연산자
true나 false를 산출하는 모든 식을 조건식이라고 할 수 있다.
ex) == , != , .equals, 삼항 연산자
public class ConditionalOperatorExample {
public static void main(String[] args) {
int score = 85;
char grade = (score > 90) ? 'A':((score > 80)? 'B': 'C');
System.out.println(score + "점은 " + grade + "등급입니다.");
}
}
3.12 연산의 방향과 우선순위
괄호를 사용하면 보기 편하다
x > 0 && y < 0 <------> (x > 0) && (y < 0)
괄호를 사용하면 외울 필요가 없다!
int a ;
int b;
int c;
a = b = c =5; 이런식으로 사용하지말고
a = 5;
b = 5;
c = 5; 이렇게 사용하자
실행문 1줄에는 1개의 실행만 있는게 좋다.
'JAVA > 이것이 자바다' 카테고리의 다른 글
CH04_조건문과 반복문 (0) | 2024.02.29 |
---|---|
CH2_변수와 타입 (0) | 2024.02.29 |
CH01_자바시작 (0) | 2024.02.29 |
CH01_인코딩 (0) | 2024.02.29 |