右移非整数类型数

dat*_*ili 5 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;
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,并出现此错误:

在函数'int main()'中:第7行:错误:类型'float'和'double'到二进制'operator >>'编译的无效操作数由于-Wfatal-errors而终止.

在这里允许在C/C++编译器中右移?我正在使用visual studio 2010.

Fré*_*idi 8

这是因为,直到C++被移植到量子计算机,你不能半个移.

换句话说,bitshift运算符 >>支持浮点操作数是没有意义的.然而.

  • @KennyTM,还没有,但这样更有趣. (2认同)

Pet*_*der 6

您不能移动非整数类型.它在C++中是非法的.

如果你想要乘以或除以2的幂,那么就这样做.由于表示它们的方式,移位不像浮点数那样工作.

如果你确实想要移动浮点数的位模式,那么你需要做一些转换,或者使用联合.

union
{
  float f;
  int i;
} u;
u.f = 56.34f;
u.i >>= 1;
cout << u.f << endl;
Run Code Online (Sandbox Code Playgroud)

但是你得到的价值完全没有意义(你没有除以2).


icy*_*com 0

为什么要右移双精度?如果您想要的话,您f / 2.0也可以这样做。