右移非整数类型数

时间:2010-11-14 16:11:30

标签: c++ bit-shift

我有以下代码

#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。

5 个答案:

答案 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平方根),请将unionunsigned一起使用。

答案 3 :(得分:0)

你为什么要右移一双?如果那是你想要的,你可以f / 2.0

答案 4 :(得分:-1)

Shift运算符仅在C ++中为整数类型定义。无论如何,您对56.34 >> 1.0的期望是什么?