컴퓨터 & 코딩/Java

[혼공학습단 10기][혼공자] 연산자

구로그 2023. 6. 29. 15:57
728x90

✓ 증감연산자 (++, --) 

i++
++i

위 둘은 기본적으로 i = i + 1 이라는 점에서 동일하지만 다른 연산자와 사용될 때는 증감 연산자의 위치에 따라 결과가 다르게 나온다❗️ 

 

- 증감 연산자가 변수 에 있을 경우 (++i, --i) : 우선 변수값을 1증가 또는 1감소시킨 후에 다른 연산자를 처리 

- 증감 연산자가 변수 에 있을 경우 (i++, i--): 다른 연산자를 먼저 처리한 후 변수 값을 1증가 또는 1 감소시킴

 

int x = 1;
int y = 1;
int result1 = ++x + 10; // 12 
int result2 = y++ + 10; // 11
  result1 result2
x의 값 1 증가 (x = x + 1)  y + 10 연산 (1 + 10)
  x + 10 연산 (2 + 10)  result2 = 11 
  result1 = 12  y의 값 1 증가 (y = y + 1)

 

 

 

✓ 산술 연산자 (+, -, *, /, %)

- long 타입을 제외한 정수 타입 연산은 int 타입으로 산출

- 피연산자 중 하나라도 실수 타입이면 실수 타입으로 산출

- char변수를 산술 연산에 사용되면 int 타입으로 변환됨

int int1 = 10;
int int2 = 4;
int result2 = int1 / int2; // 2
double result3 = int1 / int2; // 2.0

//결과값으로 2.5를 얻으려면 둘 중 하나를 double 타입으로 강제 타입 변환 해야 함 
double result4 = (int1 * 1.0) / int2;
double result5 = (double) int1 / int2;
double result6 = int1 / (double) int2;

 

 

 

✓ 실수와 비교 연산자 (==, !=) 

❗️ 0.1 == 0.1f 이 false 이유

실수의 저장 방식인 부동 소수점 방식이 0.1을 정확히 표현할 수 없기 때문이다. ( 0.1f > 0.1 ) 이를 해결하기 위해 다음과 같이 할 수 있다. 

double v1 = 0.1;
float v2 = 0.1f;

System.out.println(v1 == v2); //false
System.out.println((float)v1 == v2); //true

 

 

✓ 논리 연산자와 대입연산자 

- 논리연산자 종류: AND( && ), OR( || ), XOR( ^ ), NOT( ! )

- 대입연산자 종류: +=, -=, *=, /=, %= 

 

 

 

✓ 삼항 연산자

[조건식] ? [값 또는 연산식1] : [값 또는 연산식2]

조건식이 true일 경우 [값 또는 연산식1]이 실행

조건식이 false일 경우 [값 또는 연산식2]가 실행됨 

 

 

 


 

✅ 연습문제 답 비교 

 

나의 해결방법: 

public class ScannerExample {
	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("첫 번째 수: ");
		String num1 = scanner.nextLine();
		
		System.out.print("두 번째 수: ");
		String num2 = scanner.nextLine();
		
		System.out.println("----------------------");
		
		String result = (num2.equals("0") || num2.equals("0.0")) ? "무한대": String.valueOf(Integer.parseInt(num1) + Integer.parseInt(num2));
		
		System.out.println("결과: " + result);

	}
}

 

 

답안지의 해결방법:

public class ScannerExample {
	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("첫 번째 수: ");
		double num1 = Double.parseDouble(scanner.nextLine());
		
		System.out.print("두 번째 수: ");
		double num2 = Double.parseDouble(scanner.nextLine());
		
		System.out.println("----------------------");
		if(num2 != 0.0) {
			System.out.println("결과: " + (num1 + num2));
		} else {
			System.out.println("결과: 무한대");
		}
	}
}

나의 해결방법은 문자열 비교로 처리하고 있기 때문에 정수 값에 제한이 있고 소수점 이하의 값을 정확하게 처리할 수 없다는 단점이 있다. 따라서 정수 값으로 충분한 경우나 문자열 비교에 익숙한 경우에 적합하며, 정확한 실수 연산이 필요한 경우에는 유용하지 않다. 

 

 

반응형