Should you always use 'int' for numbers in C, even if they are non-negative?에서 모든 대답과 의견을 읽은 후에도 다음과 같은 상황에서해야 할 일을 여전히 잘 모릅니다.부호있는 정수로 모듈로 산술 c에서 정의되지 않은 동작?
두 개의 원격 장치가 각각의 위치에서 이벤트를 계산 중입니다. 그들은 정기적으로 카운터 판독 값을 PC에보고하여 피드백 알고리즘이 한계 내에서 카운터 판독 값의 차이를 유지합니다. 이벤트의 순서는 끝이 없으므로 판독 값은 모듈로 2^n으로보고됩니다. 모듈로 산술의 경우 부호없는 정수가 제안됩니다. 그러나 그 차이는 부정적이 될 수 있습니다. 차이점을 계산하기 전에 부호있는 정수로 값을 캐스팅하면 테스트 한 플랫폼에서 정상적으로 작동합니다 (즉, 크기가 작은 2^n의 모듈러스를 얻음). 인터페이스에서 이미 서명 된 것으로 판독 값을 선언하면 우아한 코드가 생성됩니다. 그러나 코드는 이식 가능해야한다. 내가 U.B. 심각하게 경고하니?
고려할 수있는 옵션 : 카운터의 값이 16 비트 부호없는 숫자 인 경우 32 비트 부호있는 숫자로 읽을 수 있습니다. 또는 그들이 32 비트라면 64 비트 숫자로 읽을 수 있습니다. 그런 다음 차이점이 정의되고 음수가 음수가됩니다. –
@JonathanLeffler 음수는 음수가되지만 모듈러 찌꺼기는 정의되지 않습니다. –
@JonathanLeffler :이 아이디어에 감사드립니다. 분기를 기반으로하는 솔루션보다 더 빠르고 읽기 쉽습니다. – Rainald62