Fixed-Point (Using the GNU Compiler Collection (GCC)) (original) (raw)
6.1.7 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 areshort _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:
- ‘hr’ or ‘HR’ for
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
- ‘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:
- Pragmas to control overflow and rounding behaviors are not implemented.
Fixed-point types are supported by the DWARF debug information format.