결과가 음수 일 때 동일한 유형의 다른 정수에서 부호없는 정수를 빼는 데 문제가 있다고 생각하는 사람의 코드를 보았습니다. 따라서 이와 같은 코드는 대부분의 아키텍처에서 작동하더라도 올바르지 않습니다.
unsigned int To, Tf;
To = getcounter();
while (1) {
Tf = getcounter();
if ((Tf-To) >= TIME_LIMIT) {
break;
}
}
이것은 내가 찾을 수있는 C 표준에서 모호하게 관련된 유일한 인용문입니다.
부호없는 피연산자를 포함하는 계산은 결과로 나타나는 부호없는 정수 형식으로 나타낼 수없는 결과가 결과 형식으로 나타낼 수있는 가장 큰 값보다 하나 더 큰 숫자로 축소되기 때문에 절대로 과잉 흐름이 발생하지 않습니다.
나는 오른쪽 피연산자가 더 클 때 연산이 모듈로 잘린 숫자의 맥락에서 의미가 있도록 조정된다는 것을 의미하는 따옴표를 취할 수 있다고 가정합니다.
즉
0x0000-0x0001 == 0x 1 0000-0x0001 == 0xFFFF
구현 종속 서명 의미를 사용하는 것과 반대 :
0x0000-0x0001 == (부호 없음) (0 + -1) == (0xFFFF뿐만 아니라 0xFFFE 또는 0x8001)
어떤 해석이 맞습니까? 그것은 전혀 정의되어 있습니까?