Superkkt Blog

유부호 정수형은 표현 할 수 있는 범위 이상의 값이 들어오는 경우 오버플로우가 발생해서 어떤 값을 가지게 될지는 정의되지 않는다 (undefined behavior). 하지만 무부호 정수형은 항상 범위 내의 정해진 값으로 조정되도록 정의되어 있다. 즉, 무부호 정수형은 변환되는 모든 값을 모듈로(modulo) 연산을 통해 범위 안의 값으로 조정한다.

"모듈로 n"이란 임의의 정수값을 n으로 나눈 나머지로 표현하는 방법을 말한다. 여기서 n은 해당 타입의 최대값 + 1을 의미한다. 예를 들어 unsigned int의 최대값이 65535라면 65531부터 65540까지의 수는 "모듈로 65536 (65535 + 1)" 연산을 통해 아래와 같이 표현된다.

65531, 65532, 65533, 65534, 65535, 0, 1, 2, 3, 4

오버플로우가 발생한 65536부터 모듈로 연산을 통해 범위 안의 값으로 조정되는것을 잘 보기 바란다.

이 방법은 음수값을 범위 안의 값으로 바꾸는 경우에도 사용된다. 일단 나누기 연산은 아래와 같이 수학적으로 표현 할 수 있다.

제수(나누는 수) * 몫 + 나머지 = 피제수 (나누어지는 수)

그래서 "모듈로 65536" 연산을 통해 음수 -2를 변환하면 아래와 같다.

65536 * -1 + 65534 = -2

따라서 범위 안으로 조정된 값은 65534가 나오게 된다.


<관련글>

보수표현: http://superkkt.com/287
유부호 정수형의 음수 표현 방법: http://superkkt.com/286
2008/01/20 13:05 2008/01/20 13:05

trackbacks

trackbacks rss

이 글에는 트랙백을 보낼 수 없습니다

Leave a Comment