728x90
계산 결과가 최댓값을 넘거나 최솟값보다 작을 경우, 음수는 양수로, 음수로 바뀌는 문제가 발생하는데 이를 오버플로우라고 한다.
1byte가 표현할 수 있는 가장 큰 값은 01111111이다. 여기에 1을 더하면 10000000이 된다. 즉, 부호 비트가 1인 음수가 되게되는데, 이 값을 구하기 위해 -1하고 보수를 취해주면 10000000이 된다. 따라서 10진수로 표현하면 -128이 되는 것이다.
정리하면 1byte로 표현할 수 있는 가장 큰 값은 127이고, 127에 1을 더하면 -128이 된다. 이 현상을 오버플로우라고 한다.
타입의 변환: 자바 강제 형 변환의 문제점
long이 가질 수 있는 가장 큰 값을 2진수로 표현하면, 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 이 된다. 이때 이 값을 int형 타입 변수에 저장하게 되면, long 8 byte 중 뒷부분 4byte가 int형 타입 변수에 저장된다. 즉 int형 타입 변수 4 byte는 모두 1로 채워진 값을 가지게 된다. 11111111 11111111 11111111 11111111. 즉, 음수가 된다.
따라서 형 변환시 주의할 점은 강제로 형 변환을 하게 될 때는 오버플로우가 발생하지 않도록 조심해야 한다.
728x90
'Language > Java' 카테고리의 다른 글
JVM의 CLASSPATH 옵션 (0) | 2023.09.13 |
---|---|
자바 컴파일 과정 (0) | 2023.09.08 |
각 타입별 값의 범위 (0) | 2023.09.07 |
논리 연산자 &&과 &, ||과 |의 차이 (0) | 2023.09.07 |
논리 연산자 ^ (0) | 2023.09.07 |