부호 증감 연산 (++, --)
- 연산자는 변수값의 부호를 변경할 때 자주 사용된다.
하지만 주의할 점이 있다. 아래와 같은 결과 컴파일 에러가 발생한다.
이유는 정수타입( int , byte , short) 연산의 결과는 int 타입이다.
byte b = 100;
byte result = -b; //컴파일 에러 발생
연산자의 증감연산자의 위치에 따라 결과가 달라진다. 증감 연산자가 변수 앞에 있으면 우선 변수를 1증가또는 1 감소시킨 후에 다른 연산을 행한다. 증감 연산자가 변수 뒤에 있으면 모든 연산을 끝낸 뒤에 변수를 1증가또는 1 감소시킨다.
int x = 1;
int y = 1;
int result1 = ++x + 10; //x를 1 증가, int result = 2 + 10
itn result2 = y++ + 10; //int result2 = 1 + 10 , y를 1 증가
오버플러우와 언더플로우
간단하게 말하면, 오버플로우는 위로넘치는 것이고, 언더플로우는 아래로 넘치는 것이다.
- 오버플로우 = 타입이 허용하는 최댓값을 벗어나는 것
- 언더플로우 = 타입이 허용하는 최솟값을 벗어나는 것
🤔 그러면 정수타입의 연산에서 오버플로우 또는 언더플로우가 발생하면 어떻게 될까?
오버플로우와 언더플로우 에러가 발생할 것 같지만 , 해당 정수 타입의 최소값, 최댓값으로 되돌아 간다.
byte value = 127; //byte의 허용 범위는 -128 ~ 127 이다.
value ++;
System.out.println(value); //결과는 -128이 된다.
byte value = -128; //byte의 허용 범위는 -128 ~ 127 이다.
value--;
System.out.println(value); //결과는 127이 된다.
정확한 계산은 정수 계산으로
public class Main {
public static void main(String[] args) {
int apple = 1;
double piceUnit = 0.1;
int number = 7;
double result = apple - number * piceUnit;
System.out.println(result);
}
}
출력된 결과를 보면 result 변수의 값은 정확히 0.3이 아니다. 이것은 부동소수점 방식을 사용하는 실수 타입에서 흔히 발생한다. 그렇기 때문에 정확한 계산이 필요하다면 정수 연산으로 변경해서 다음과 같이 계산하는 것이 좋다.
public class Main {
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);
}
}
참고 자료 : https://youtu.be/vIo7kEfBnU0?list=PLVsNizTWUw7EmX1Y-7tB2EmsK6nu6Q10q
'JAVA' 카테고리의 다른 글
참조 타입, 문자열 (0) | 2023.01.15 |
---|---|
switch문 (0) | 2023.01.07 |
비교 연산자 (0) | 2023.01.05 |
패키지, 클래스 ,메소드 선언 & 변수와 연산 (0) | 2022.12.18 |
프로그래밍 언어와 자바 (0) | 2022.12.12 |