bool IsOveflow_uint(unsigned int original, unsigned int add) {
unsigned int before = original;
unsigned int after = before + add;
if((original & 0x80000000) != (after & 0x80000000))
return false;
return true;
}
책에 설명 띡 한줄(오버플로우 체크한다) 적혀있던데 이 코드가 어떻게 오버플로우 체크되는지 설명해주실분 ㅠ
sign 비트 비교아닌가? - dc App
헐 똑똑하네 ㄷㄷ
ㄳㄳ
부호가 다른지 보는거네
학점 달달하다
저게 어떻게 오버플로우를 체크함? 1, 1 넣으면 true 나올것 같은데
1,1 넣으면 0 != 0 이니까 false 리턴하지 않나?
0 != 0 이면 false 니까 true 를 반환하잖슴 그리고 반환값이 서로 바뀌더라도 0x40000000, 0x80000000 넣으면 true 아님?
오잉
그렇네
왜 체크를 저렇게하지
!=가 아니라 >로 비교해야 되는거 아닌가
MSB 비교하는건 맞는거 같은데 왜 true false가 바뀐거 같지
아니 걍 original > after하면 되는거 아니냐? 왜 저리 힘들게 하지
주딱은 통찰 자체가 어나더레벨이네
그리고 unsigned int 타입인데 왜 부호 비교한다는 말이 나오냐 ㅋㅋ
signed 타입이면 오버플로우가 UB니까 저렇게 더해버리고 비교하는게 불가능
미안 못봣음 ㅎ