용어/java

[국비][JAVA] 오버플로우와 언더플로우 개념 / 쉬프트 연산자

줌인. 2024. 5. 27. 22:43
오버플로우(Overflow) 언더플로우(Underflow)
표현할 수 있는 최대값을 초과하는 상황 표현할 수 있는 최소값보다 더 작은 값이 되는 상황
정수 연산에서 최대값을 다룰 때 부동 소수점 연산에서 매우 작은 수를 다룰 때
∴ 값이 순환하여 음수 또는 다른 값이 됨 ∴ 값이 0으로 처리되거나 매우 작은 비정규화 수로 표현됨
오버플로우 예시 언더플로우 예시
int max_int = 2147483647; // 32비트 정수 최대값
int overflowed_value = max_int + 1;
// overflowed_value는 -2147483648이 됨
int minInt = Integer.MIN_VALUE;
// 32비트 정수 최소값: -2147483648
int underflowedValue = minInt - 1; // 언더플로 발생
//underflowed_value는 2147483647이 됨

 

 

쉬프트 연산자
A << B 정수 A의 bit를 정수 B 만큼 좌측으로 밀고 빈칸은 0으로 채움
A >> B - 정수 A의 bit를 정수 B 만큼 우측 으로 밀고 
1) A가 양의 정수라면 전부 0으로 채우고
2) A가 음의 정수라면 전부 1로 채움

 

[예시 : A << B] : 12 << 2

0 0 0 0 1 1 0 0

- 값 12

0 0 1 1 0 0 0 0

- 1, 1이 들어있는 값 좌측으로 2칸밀고 밀린 부분은 0으로 : 최종 48

 

[예시 : A >> B] : 3 >> 2

0 0 0 0 0 0 1 1

- 값 3

0 0 0 0 0 0 0 0

- 1, 1이 들어있는 값 우측으로 2칸 밀고 밀린 부분은 0으로

728x90