шестнадцатеричная плавающая константа в C

0x0.3p10 представляет, какую ценность?

И каково значение p в приведенном выше высказывании?

0x0.3p10 – пример шестнадцатеричного литерала с плавающей запятой, введенного на C99. p отделяет базовый номер от экспоненты.

0x0.3 называется значимой частью (целая с необязательной долей), а показатель степени равен двум, по которым он масштабируется.

Это значение вычисляется как 0.3 в гексагоне или 3 * 16 -1 ( 3/16 ), умноженное на 2 10 ( 1024 ), что дает 3 * 1024 / 16 или 192 .

Следующая программа подтверждает это:

 #include  int main (void) { double d = 0x0.3p10; printf ("%.f\n", d); return 0; } 

Раздел 6.4.4.2 документа C99 содержит все детали:

Плавающая константа имеет значительную часть, за которой может следовать экспоненциальная часть и суффикс, который указывает его тип. Компоненты значимой части могут включать в себя цифровую последовательность, представляющую собой часть целого числа, за которой следует период (.), За которым следует последовательность цифр, представляющая часть дроби.

Компонентами экспоненциальной части являются e, E, p или P, за которыми следует показатель, состоящий из необязательно подписанной цифровой последовательности. Должна присутствовать либо часть целого числа, либо часть фракции; для десятичных плавающих констант должен присутствовать либо период, либо часть экспоненты.

Значимая часть интерпретируется как (десятичное или шестнадцатеричное) рациональное число; последовательность цифр в экспоненциальной части интерпретируется как десятичное целое число. Для десятичных плавающих констант показатель показывает мощность 10, по которой значительная часть должна масштабироваться. Для шестнадцатеричных плавающих констант показатель показывает мощность 2, по которой значительная часть должна масштабироваться.

Для десятичных плавающих констант, а также для шестнадцатеричных плавающих констант, когда FLT_RADIX не является степенью 2, результатом является либо ближайшее представимое значение, либо большее или меньшее представляемое значение, непосредственно смежное с ближайшим представимым значением, выбранным в определенном реализацией манера. Для шестнадцатеричных плавающих констант, когда FLT_RADIX имеет мощность 2, результат корректно округляется.

  • Почему поведение пула констант Integer изменяется на 127?
  • Как установить переменные в сценариях HIVE
  • Как указать путь во время выполнения?
  • Почему не String.Empty константа?
  • Быстрые константы: Struct или Enum
  • Почему я могу изменить локальную константную переменную с помощью указателей, но не глобальную в C?
  • В чем разница между char s и char * s?
  • В Delphi 7, почему я могу присвоить значение const?
  • Каков наилучший способ реализации констант в Java?
  • Как ссылаться на константы в EL?
  • Статический readonly vs const
  • Давайте будем гением компьютера.