C 错误:二进制操作数无效>&燃气轮机;(有浮点数和整数)

C 错误:二进制操作数无效>&燃气轮机;(有浮点数和整数),c,floating-point,bitwise-operators,eeprom,pic24,C,Floating Point,Bitwise Operators,Eeprom,Pic24,我试图在C中将float转换为按位int。下面是我的代码片段: 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: invali

我试图在C中将float转换为按位int。下面是我的代码片段:

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'),

在试图编译时。这里,温度偏移是一种浮点类型,我试图将其转换为高int和低int,因为我试图将数据保存在16位块的EEPROM中(因为我使用的是16位微控制器)。我知道“>>”不适用于浮点类型。如何解决此问题?

创建一个单独的
unsigned int
变量和
memcpy
浮点值,然后进行处理

unsigned int temperature_offset_int;
memcpy(&temperature_offset_int, &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 & 0xffff);

您可能需要确保
int
的大小与
float
的大小相同。否则,这看起来比我无力的回答要好:)