“Any extended integer types that exist in the
implementation (C99 6.2.5).” |
|
The __int24 and __uint24 keywords
designate a signed and unsigned, respectively, 24-bit integer type. |
“Whether signed integer types are represented
using sign and magnitude, two’s complement, or one’s complement and whether the
extraordinary value is a trap representation or an ordinary value (C99
6.2.6.2).” |
|
All integer types are represented as two’s complement and all bit patterns
are ordinary values. |
“The rank of any extended integer type relative to
another extended integer type with the same precision (C99 6.3.1.1).” |
|
There are no extended integer types with the same precision. |
“The result of, or the signal raised by,
converting an integer to a signed integer type when the value cannot be
represented in an object of that type (C90 6.2.1.2, C99 6.3.1.3).” |
|
When converting value X to a type of width N, the value of the result is
the Least Significant N bits of the 2’s complement representation of X. That
is, X is truncated to N bits. No signal is raised. |
“The results of some bitwise operations on signed
integers (C90 6.3, C99 6.5).” |
|
The right shift operator (>> operator) sign extends signed
values. Thus, an object with the signed int value 0x0124
shifted right one bit will yield the value 0x0092 and the value 0x8024 shifted
right one bit will yield the value 0xC012. Right shifts of unsigned integral
values always clear the MSb of the result. Left shifts
(<< operator) of signed or unsigned values always
clear the LSb of the result.
Other bitwise operations act as if the operand
was unsigned. |