嗨我想做以下任务:
double time;
char array[6];
for(int index=0; index<6; index++){
array[index]=(char)(time>>(8*index));
}
但出现错误:expresion必须包含整数或无范围的枚举
答案 0 :(得分:4)
来自ISO / IEC 9899:1999(a.k.a. C99标准):
6.5.7按位移位运算符
约束
2每个操作数都应具有整数类型。
如果您希望将 time
除以2 (8*index)
,则可以:
pow()
或1 << (8*index)
的整数变量,然后将时间除以此变量如果你想实际上对IEEE浮点数(1)的二进制表示进行一点移位(不是我理解你为什么要这样做),你可以做以下内容:
uint64_t x = *(uint64_t *)&time;
array[index]=(char)(x>>(8*index));
(1):假设您的实现使用IEEE浮点
答案 1 :(得分:2)
右移一个浮点数或双数几乎肯定不是你想要做的,因为数据表示不会受到右移的影响,除以2的幂。
答案 2 :(得分:0)
您不能将右移运算符用于双变量。