【发布时间】:2019-06-25 05:43:36
【问题描述】:
我正在尝试在 Windows 中的 C 中创建一个函数,该函数具有双精度(8 字节)作为输入并返回另一个双精度但重新排列,即输入为 B7 ... B0,输出为 B0 ... B7。在处理 int 和 double 数据时,我的编译器给了我一个错误。
我考虑过获取输入值并使用高级别字节 (0xFF) 制作掩码,从而将形成双输入值的 8 个字节分开,然后按照输入的顺序以外的顺序连接它们并得到我的双输出随心所欲地订购,但它不起作用。
代码如下:
double ordena_lineal(double lineal)
{
// Recibo B7...B0 y devuelvo B0...B7
uint8_t B0,B1,B2,B3,B4,B5,B6,B7;
double lineal_final;
B0 = lineal&&0xFF;
B1 = (lineal>>8)&&0xFF;
B2 = (lineal>>8*2)&&0xFF;
B3 = (lineal>>8*3)&&0xFF;
B4 = (lineal>>8*4)&&0xFF;
B5 = (lineal>>8*5)&&0xFF;
B6 = (lineal>>8*6)&&0xFF;
B7 = (lineal>>8*7)&&0xFF;
lineal_final = (B7 | (B6 << 8) | (B5 << 8*2) | (B4 << 8*3) | (B3 << 8*4) | (B2 << 8*5) | (B1 << 8*6) | (B0 << 8*7))
return lineal_final;
}
【问题讨论】:
-
没有在 double 上定义移位。你需要找到另一个技巧。不过你的想法不错。
-
&&是逻辑与运算符,而不是按位AND运算符。由于 0xFF 不为零,因此您将值1分配给B0...B7