6.16 Типы с фиксированной точкой
В качестве расширения GNU C поддерживает типы с фиксированной точкой, как определено в проекте черновика ISO/IEC DTR 18037 N1169. Поддержка типов с фиксированной точкой в 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.
Далее: Именованные адресные пространства, Предыдущее: Шестнадцатеричные числа с плавающей точкой, Вверх: Расширения языка C [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/Fixed-Point.html