Spec-Zone.ru › GCC 13

6.16 Типы с фиксированной точкой

В качестве расширения 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.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/Fixed_002dPoint.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API