Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 右移双变量_C_Double - Fatal编程技术网

C 右移双变量

C 右移双变量,c,double,C,Double,您好,我想执行以下任务: double time; char array[6]; for(int index=0; index<6; index++){ array[index]=(char)(time>>(8*index)); } 双倍时间; 字符数组[6]; 对于(int-index=0;index>(8*index)); } 但是错误出现了:表达式必须具有整数或非范围枚举右移浮点或双精度几乎肯定不是您想要做的,因为数据表示不会受到右移2次方的影响。来自ISO/IE

您好,我想执行以下任务:

double time;
char array[6];
for(int index=0; index<6; index++){
  array[index]=(char)(time>>(8*index));
}
双倍时间;
字符数组[6];
对于(int-index=0;index>(8*index));
}

但是错误出现了:表达式必须具有整数或非范围枚举

右移浮点或双精度几乎肯定不是您想要做的,因为数据表示不会受到右移2次方的影响。

来自ISO/IEC 9899:1999(又称C99标准):

6.5.7位移位运算符 约束条件 2每个操作数应为整数类型

如果要将
时间
除以
(8*索引)
的幂2,可以:

  • 使用math.h中的
    pow()
    ,或

  • 创建一个值为
    1的整数变量。您不能对双精度变量使用右移运算符。

    您希望双精度变量右移做什么?请阅读内存中如何表示双精度变量,然后你就会明白为什么移动它是没有意义的。我有一个很大的数字,应该打包在一个数组中,数组应该放在数据框中。我不理解你的问题。你想要达到的目标是什么?你能解释一下如何在数组中放置double吗?数组是6个字节,(通常)一个double是8个字节,所以所有的double都不适合。事实上,我正在研究DNP3协议,它使用六字节的时间戳字段
    uint64_t x = *(uint64_t *)&time;
    array[index]=(char)(x>>(8*index));