正确地移动双变量

时间:2015-11-22 08:24:59

标签: c double

嗨我想做以下任务:

double time;
char array[6];
for(int index=0; index<6; index++){
  array[index]=(char)(time>>(8*index));
}

但出现错误:expresion必须包含整数或无范围的枚举

3 个答案:

答案 0 :(得分:4)

来自ISO / IEC 9899:1999(a.k.a. C99标准):

  

6.5.7按位移位运算符

     

约束

     

2每个操作数都应具有整数类型。

如果您希望 time除以2 (8*index),则可以:

  1. 使用math.h中的pow()
  2. 创建一个值为1 << (8*index)的整数变量,然后将时间除以此变量
  3. 如果你想实际上对IEEE浮点数(1)的二进制表示进行一点移位(不是我理解你为什么要这样做),你可以做以下内容:

    uint64_t x = *(uint64_t *)&time;
    array[index]=(char)(x>>(8*index));
    

    (1):假设您的实现使用IEEE浮点

答案 1 :(得分:2)

右移一个浮点数或双数几乎肯定不是你想要做的,因为数据表示不会受到右移的影响,除以2的幂。

答案 2 :(得分:0)

您不能将右移运算符用于双变量。