我有以下代码
#include <iostream>
using namespace std;
int main(){
float f=56.34f;
double d=12.34101;
cout<<(f>>1.0)<<endl;
cout<<(d>>1.0)<<endl;
return 0;
}
但它不起作用并且存在此错误:
在函数'int main()'中: 第7行:错误:类型'float'和'double'到二进制'运算符&gt;&gt;'的操作数无效 由于-Wfatal-errors而导致编译终止。
这里允许在C / C ++编译器中正确移位吗?我正在使用visual studio 2010。
答案 0 :(得分:8)
那是因为,在C ++移植到quantum computers之前,你不能移动bit的一半。
换句话说,bitshift operator >>
支持浮点操作数是没有意义的。爱好。
答案 1 :(得分:6)
您无法移动非整数类型。它在C ++中是非法的。
如果你想要乘以或除以2的幂,那么就这样做。由于它们的表示方式,移位不像浮点数那样有效。
如果您确实想要移动浮点数的位模式,那么您需要进行一些转换,或使用联合。
union
{
float f;
int i;
} u;
u.f = 56.34f;
u.i >>= 1;
cout << u.f << endl;
但是你得到的价值完全没有意义(你没有除以2)。
答案 2 :(得分:1)
不,因为浮点数的二进制表示应该是不透明的(实际上除以2,你应该减少尾数)。请改用*0.5f
。
如果你真的想转移二进制表示(比如Quake平方根),请将union
与unsigned
一起使用。
答案 3 :(得分:0)
你为什么要右移一双?如果那是你想要的,你可以f / 2.0
。
答案 4 :(得分:-1)
Shift运算符仅在C ++中为整数类型定义。无论如何,您对56.34 >> 1.0
的期望是什么?