> As far as I can remember, the C standard still do not require that > the computer uses two complement.
No, but unsigned integer types have to work as if it did. Signed integer types may use two's complement, one's complement, or even sign/magnitude, but nothing else; for example, implementing signed integers with base -2 is not permitted. 6.2.6.2 in the very late C99 draft I have, notes manually edited in: [#2] For signed integer types, the bits of the object representation shall be divided into three groups: value bits, padding bits, and the sign bit. There need not be any padding bits; there shall be exactly one sign bit. Each bit that is a value bit shall have the same value as the same bit in the object representation of the corresponding unsigned type (if there are M value bits in the signed type and N in the unsigned type, then M<=N). If the sign bit is zero, it shall not affect the resulting value. If the sign bit is one, the value shall be modified in one of the following ways: -- the corresponding value with sign bit 0 is negated (sign and magnitude); -- the sign bit has the value -(2N) (two's complement); (that's -(2^N), mangled by textification) -- the sign bit has the value -(2N-1) (one's complement). (that's -((2^N)-1), mangled by textification) Which of these applies is implementation-defined, as is whether the value with sign bit 1 and all value bits zero (for the first two), or with sign bit and all value bits 1 (for one's complement), is a trap representation or a normal value. In the case of sign and magnitude and one's complement, if this representation is a normal value it is called a negative zero. ... [#5] The values of any padding bits are unspecified.45) A (the "45)" is a footnote reference) valid (non-trap) object representation of a signed integer type where the sign bit is zero is a valid object representation of the corresponding unsigned type, and shall represent the same value. /~\ The ASCII Mouse \ / Ribbon Campaign X Against HTML mo...@rodents-montreal.org / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B