ошибка: недопустимые операнды для двоичного >> (имеют ‘float’ и ‘int’)

#c #floating-point #bitwise-operators #eeprom #pic24

#c #с плавающей запятой #побитовые операторы #eeprom #pic24

Вопрос:

Я пытаюсь преобразовать float в побитовое значение int в C. Вот мой фрагмент кода:

 write_eeprom(INDEX_CONFIG_TEMPERATURE_OFFSET_HIGH_INT, (unsigned int) (temperature_offset>>16));
write_eeprom(INDEX_CONFIG_TEMPERATURE_OFFSET_LOW_INT, (unsigned int) (temperature_offset));
 

Я получаю следующую ошибку:

 error: invalid operands to binary >> (have 'float' and 'int'),
 

при попытке компиляции. Здесь temperature_offset — это тип с плавающей запятой, и я пытаюсь использовать его как high int и low int, поскольку я пытаюсь сохранить данные в EEPROM в 16-битных фрагментах (поскольку я использую 16-разрядный микроконтроллер). Я знаю, что ‘>>’ не применяется к типам с плавающей запятой. Как я могу исправить эту проблему?

Ответ №1:

Создайте отдельную unsigned int переменную и memcpy значение с плавающей запятой в ней, затем поработайте над этим.

 unsigned int temperature_offset_int;
memcpy(amp;temperature_offset_int, amp;temperature_offset, sizeof(temperature_offset));
write_eeprom(INDEX_CONFIG_TEMPERATURE_OFFSET_HIGH_INT, temperature_offset_int >> 16);
write_eeprom(INDEX_CONFIG_TEMPERATURE_OFFSET_LOW_INT, temperature_offset_int amp; 0xffff);
 

Комментарии:

1. вероятно, вам нужно убедиться, что int он имеет тот же размер, float что и . В противном случае это выглядит лучше, чем мой слабый ответ 🙂