변환과 오버플로우 차이 질문입니다.
글쓴이: bureokjam / 작성시간: 월, 2017/06/12 - 3:56오후
다음과 같이 변환은 implementation-defined인 반면에 오버플로우는 undefined입니다. 이렇게 서로 차이를 보이는 이유가 있나요?
signed int a = UINT_MAX; // 변환 signed int b = INT_MAX + 1; // 덧셈과정에서 오버플로우
UINT_MAX라는 값이 signed int형으로 변환될 때, 그 결과는 컴파일러마다 다를 것입니다(이식성이 없을 것입니다). 반면 INT_MAX+1의 연산 결과도 signed int형을 갖어야 하지만 이것은 오버플로우이고, 정의되지 않은 동작입니다. 그래서 여쭤보고 싶은 것이 같은 signed int형인데, 변환될 때는 이식성이 없을 뿐이지 잘못된 프로그램은 아닌 반면에 오버플로우에서는 잘못된 프로그램이 되어버립니다. 이렇게 미묘한(?) 차이를 보이는 이유가 있나요?
Forums:
댓글 달기