unsigned 되어있는 변수의 합에서 오버플로우 예측하는 법을 알고 싶습니다.
어떻게 하면 효과적인 unsigned 변수의 두 합의 overflow를 알아낼수 있을까요?
그럼 즐거운 한가위 보내세요^^
두수의 제일 앞 비트가 둘다 1이면 일단 overflow
다음은 둘다 제일 앞 비트가 0 이면 overflow 는 없을테니 상관없겠지요.
마지막으로 두 수의 제일 앞 비트가 1,0 인 각각 두수를 제일 앞비트만 0 으로 바꾸고
바꾼 두수를 더해서 제일 앞 비트가 1로 바뀌면 overflow 겠지요.
더 좋은 방법이 있을꺼 같은데 여하튼 naive 한 방법이고..
overflow 를 일으켜도 된다면
두수를 더해서 각각 숫자와 비교해서 둘중 어느 하나보다도 더한 결과가 작으면 overflow 라고 볼 수 있겠네요.
Neogeo - Future is Now.
a + b 일 때 a + b > UINT_MAX 이면 오버플로우이므로, 양변에서 a를 빼주면
b>UINT_MAX-a 일 때 오버플로우입니다. 실제로 오버플로우를 유발하지 않으면서 체크할 수 있습니다.
Orion Project : http://orionids.org
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
unsigned 는 무조건
두수의 제일 앞 비트가 둘다 1이면 일단 overflow
다음은 둘다 제일 앞 비트가 0 이면 overflow 는 없을테니 상관없겠지요.
마지막으로 두 수의 제일 앞 비트가 1,0 인 각각 두수를 제일 앞비트만 0 으로 바꾸고
바꾼 두수를 더해서 제일 앞 비트가 1로 바뀌면 overflow 겠지요.
더 좋은 방법이 있을꺼 같은데 여하튼 naive 한 방법이고..
overflow 를 일으켜도 된다면
두수를 더해서 각각 숫자와 비교해서 둘중 어느 하나보다도 더한 결과가 작으면 overflow 라고 볼 수 있겠네요.
Neogeo - Future is Now.
Neogeo - Future is Now.
a + b 일 때 a + b >
a + b 일 때 a + b > UINT_MAX 이면 오버플로우이므로, 양변에서 a를 빼주면
b>UINT_MAX-a 일 때 오버플로우입니다. 실제로 오버플로우를 유발하지 않으면서 체크할 수 있습니다.
Orion Project : http://orionids.org
댓글 달기