Fixed-Point Types#
As an extension, GNU C 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 (
+=,-=,*=,/=,<<=,>>=)conversions to and from integer, floating-point, or fixed-point types
Use a suffix in a fixed-point literal constant:
hrorHRforshort _Fractand_Sat short _FractrorRfor_Fractand_Sat _FractlrorLRforlong _Fractand_Sat long _FractllrorLLRforlong long _Fractand_Sat long long _FractuhrorUHRforunsigned short _Fractand_Sat unsigned short _FracturorURforunsigned _Fractand_Sat unsigned _FractulrorULRforunsigned long _Fractand_Sat unsigned long _FractullrorULLRforunsigned long long _Fractand_Sat unsigned long long _FracthkorHKforshort _Accumand_Sat short _AccumkorKfor_Accumand_Sat _AccumlkorLKforlong _Accumand_Sat long _AccumllkorLLKforlong long _Accumand_Sat long long _AccumuhkorUHKforunsigned short _Accumand_Sat unsigned short _AccumukorUKforunsigned _Accumand_Sat unsigned _AccumulkorULKforunsigned long _Accumand_Sat unsigned long _AccumullkorULLKforunsigned long long _Accumand_Sat unsigned long long _Accum
GCC support of fixed-point types as specified by the draft technical report is incomplete:
Pragmas to control overflow and rounding behaviors are not implemented.
Fixed-point types are supported by the DWARF debug information format.