연산과정에서 해당
타입,type이 표현할 수 있는 값의 범위를 넘어서는 것을
오버플로우(overflow)라고 한다.
오버플로우가 발생했다고 해서
에러,error가 발생하는 것은 아니다. 다만 예상했던 결과를 얻지 못할 뿐이다.
이건 자동차 주행표시기(odometer)나 계수기(counter)등 일상생활에서도 발견할 수 있다. //
셈,counting 카운터,counter
네 자리 계수기라면 0000~9999밖에 표현하지 못하고 9999다음의 숫자는 0000이 된다.
그렇다면 최소값인 0000에서 1을 감소시키면?
0에서 1을 뺄 수 없으므로 0000앞에 저장되어 있지 않은 1이 있다고 가정하고
(i.e. 10000이라고 가정하고) 뺄셈,subtraction을 한다.
결과는 아래와 같이 네 자리로 표현할 수 있는 최대값이 된다.
(맨 앞에 실제로는 없는 1이 있다고 가정)
10진수: 2진수:
10000 10000
-) 1 -) 1
--------- ---------
9999 1111
이는 마치 계수기를 거꾸로 돌리는 것과 같다. 0000에서 정방향으로 돌리면 0001이 되고 역방향으로 돌리면 9999가 되는 것이다.
그래서 정수형 타입이 표현할 수 있는 최대값에 1을 더하면 최소값이 되고, 최소값에서 1을 빼면 최대값이 된다.
이거 표현이 wrap-around이었나... -> right. wraparound#Noun 7. ... integer wraparound
(Java의 정석 v1 p64)