Thomas Bushnell writes: > Actually, the C standard does essentially guarantee two's complement > arithmetic. It specifies integer overflow behavior and > signed/unsigned conversion behavior exactly.
It does for unsigned integers, but for signed integers overflow is undefined behaviour. The clearest statement of that is 3.4.3, albeit in an example: 3.4.3 1 undefined behavior behavior, upon use of a nonportable or erroneous program construct or of erroneous data, for which this International Standard imposes no requirements 2 NOTE Possible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation or program execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message). 3 EXAMPLE An example of undefined behavior is the behavior on integer overflow. -- Olaf Weber (This space left blank for technical reasons.)