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:
hr
orHR
forshort _Fract
and_Sat short _Fract
r
orR
for_Fract
and_Sat _Fract
lr
orLR
forlong _Fract
and_Sat long _Fract
llr
orLLR
forlong long _Fract
and_Sat long long _Fract
uhr
orUHR
forunsigned short _Fract
and_Sat unsigned short _Fract
ur
orUR
forunsigned _Fract
and_Sat unsigned _Fract
ulr
orULR
forunsigned long _Fract
and_Sat unsigned long _Fract
ullr
orULLR
forunsigned long long _Fract
and_Sat unsigned long long _Fract
hk
orHK
forshort _Accum
and_Sat short _Accum
k
orK
for_Accum
and_Sat _Accum
lk
orLK
forlong _Accum
and_Sat long _Accum
llk
orLLK
forlong long _Accum
and_Sat long long _Accum
uhk
orUHK
forunsigned short _Accum
and_Sat unsigned short _Accum
uk
orUK
forunsigned _Accum
and_Sat unsigned _Accum
ulk
orULK
forunsigned long _Accum
and_Sat unsigned long _Accum
ullk
orULLK
forunsigned 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.