Next: Zero Length, Previous: Hex Floats, Up: C Extensions
As an extension, the GNU C compiler supports fixed-point types as defined in the N1169 draft of ISO/IEC DTR 18037. Support for fixed-point types in GCC will evolve as the draft technical report changes. Calling conventions for any target might also change. Not all targets support fixed-point types.
The fixed-point types are
short _Fract
,
_Fract
,
long _Fract
,
long long _Fract
,
unsigned short _Fract
,
unsigned _Fract
,
unsigned long _Fract
,
unsigned long long _Fract
,
_Sat short _Fract
,
_Sat _Fract
,
_Sat long _Fract
,
_Sat long long _Fract
,
_Sat unsigned short _Fract
,
_Sat unsigned _Fract
,
_Sat unsigned long _Fract
,
_Sat unsigned long long _Fract
,
short _Accum
,
_Accum
,
long _Accum
,
long long _Accum
,
unsigned short _Accum
,
unsigned _Accum
,
unsigned long _Accum
,
unsigned long long _Accum
,
_Sat short _Accum
,
_Sat _Accum
,
_Sat long _Accum
,
_Sat long long _Accum
,
_Sat unsigned short _Accum
,
_Sat unsigned _Accum
,
_Sat unsigned long _Accum
,
_Sat unsigned long long _Accum
.
Fixed-point data values contain fractional and optional integral parts.
The format of fixed-point data varies and depends on the target machine.
Support for fixed-point types includes prefix and postfix increment
and decrement operators (++
, --
); unary arithmetic operators
(+
, -
, !
); binary arithmetic operators (+
,
-
, *
, /
); binary shift operators (<<
, >>
);
relational operators (<
, <=
, >=
, >
);
equality operators (==
, !=
); assignment operators
(+=
, -=
, *=
, /=
, <<=
, >>=
);
and conversions to and from integer, floating-point, or fixed-point types.
Use a suffix `hr' or `HR' in a literal constant of type
short _Fract
and _Sat short _Fract
,
`r' or `R' for _Fract
and _Sat _Fract
,
`lr' or `LR' for long _Fract
and _Sat long _Fract
,
`llr' or `LLR' for long long _Fract
and
_Sat long long _Fract
,
`uhr' or `UHR' for unsigned short _Fract
and
_Sat unsigned short _Fract
,
`ur' or `UR' for unsigned _Fract
and
_Sat unsigned _Fract
,
`ulr' or `ULR' for unsigned long _Fract
and
_Sat unsigned long _Fract
,
`ullr' or `ULLR' for unsigned long long _Fract
and _Sat unsigned long long _Fract
,
`hk' or `HK' for short _Accum
and _Sat short _Accum
,
`k' or `K' for _Accum
and _Sat _Accum
,
`lk' or `LK' for long _Accum
and _Sat long _Accum
,
`llk' or `LLK' for long long _Accum
and
_Sat long long _Accum
,
`uhk' or `UHK' for unsigned short _Accum
and
_Sat unsigned short _Accum
,
`uk' or `UK' for unsigned _Accum
and
_Sat unsigned _Accum
,
`ulk' or `ULK' for unsigned long _Accum
and
_Sat unsigned long _Accum
,
and `ullk' or `ULLK' for unsigned long long _Accum
and _Sat unsigned long long _Accum
.
GCC support of fixed-point types as specified by the draft technical report is incomplete:
Fixed-point types are supported by the DWARF2 debug information format.