6.15 Типы с фиксированной точкой
В качестве расширения, GNU C поддерживает типы с фиксированной точкой, как определено в проекте N1169 черновика ISO/IEC DTR 18037. Поддержка типов с фиксированной точкой в GCC будет развиваться по мере изменения черновика технического отчета. Вызовы функций для любого целевого устройства также могут измениться. Не все целевые устройства поддерживают типы с фиксированной точкой.
Типы с фиксированной точкой — это 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.
Значения данных с фиксированной точкой содержат дробную и необязательную целую части. Формат данных с фиксированной точкой варьируется и зависит от целевой машины.
Поддержка типов с фиксированной точкой включает:
- Префиксные и постфиксные операторы инкремента и декремента (
++,--) - Унарные арифметические операторы (
+,-,!) - Бинарные арифметические операторы (
+,-,*,/) - Бинарные операторы сдвига (
<<,>>) - Операторы отношения (
<,<=,>=,>) - Операторы равенства (
==,!=) - Операторы присваивания (
+=,-=,*=,/=,<<=,>>=) - Преобразования в и из целых, с плавающей точкой или типов с фиксированной точкой
Используйте суффикс в литерале константы с фиксированной точкой:
- ‘
hr’ или ‘HR’ дляshort _Fractи_Sat short _Fract - ‘
r’ или ‘R’ для_Fractи_Sat _Fract - ‘
lr’ или ‘LR’ дляlong _Fractи_Sat long _Fract - ‘
llr’ или ‘LLR’ дляlong long _Fractи_Sat long long _Fract - ‘
uhr’ или ‘UHR’ дляunsigned short _Fractи_Sat unsigned short _Fract - ‘
ur’ или ‘UR’ дляunsigned _Fractи_Sat unsigned _Fract - ‘
ulr’ или ‘ULR’ дляunsigned long _Fractи_Sat unsigned long _Fract - ‘
ullr’ или ‘ULLR’ дляunsigned long long _Fractи_Sat unsigned long long _Fract - ‘
hk’ или ‘HK’ дляshort _Accumи_Sat short _Accum - ‘
k’ или ‘K’ для_Accumи_Sat _Accum - ‘
lk’ или ‘LK’ дляlong _Accumи_Sat long _Accum - ‘
llk’ или ‘LLK’ дляlong long _Accumи_Sat long long _Accum - ‘
uhk’ или ‘UHK’ дляunsigned short _Accumи_Sat unsigned short _Accum - ‘
uk’ или ‘UK’ дляunsigned _Accumи_Sat unsigned _Accum - ‘
ulk’ или ‘ULK’ дляunsigned long _Accumи_Sat unsigned long _Accum - ‘
ullk’ или ‘ULLK’ дляunsigned long long _Accumи_Sat unsigned long long _Accum
Поддержка типов с фиксированной точкой в GCC, как указано в черновике технического отчета, неполная:
- Предикаты для управления переполнением и поведением округления не реализованы.
Типы с фиксированной точкой поддерживаются форматом отладки DWARF 2.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Fixed-Point.html