본문 바로가기
JAVA/이것이 자바다

CH3_연산자

by leek94 2024. 2. 29.

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