는, GCC는 때때로 나에게 말한다 /
또는 %
>>
또는 &
을 단순화 때이 재현 가능한 테스트 케이스를 만들기 위해 실패
[-Wstrict-overflow
]부서를 오른쪽 시프트로 변경할 때 부호있는 오버플로가 발생할 수 있습니까? 최적화 할 때
발생하지 않습니다 서명 오버 플로우를 가정
이를 위해 내 생산 코드에는 다음과 같은 것이 포함되어 있습니다.
int left = a.left() + (a.width() - b.width())/2;
모든 메소드가
int
값을 반환합니다.
/2
을>>1
으로 바꾸거나 (예 :%4
을&3
으로 바꾸는 것이 정수 오버플로를 유발할 수있는 이유는 무엇입니까?
>> 부호있는 정수의 경우 구현에 따라 다릅니다. 참조하십시오 : http://stackoverflow.com/questions/11644362/are-the-results-of-bitwise-operations-on-signed-integers-defined – virgesmith
결과가 ** undefined 일 수 있다는 경고를 오해 한 것 같습니다. **. 하지만 ** 구현 정의 **라고 말하고 있습니다. 어느 쪽이 그렇게 나쁘지는 않지만 경고를받는 것이 여전히 유용합니다. –
이것은 컴파일러가 대상을 알아야하므로 예를 들어'/'를'/'로 대체 한 * 프로그래머 *와는 다릅니다. –