为什么左移浮动值有效?

时间:2014-02-05 06:57:10

标签: c++ floating-point bit-manipulation bit-shift

据我了解 Left shift Float type 一个人不能在浮点值上使用左移运算符。但是当我尝试它时,它给出了与乘以2 n 相同的答案。

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    // your code goes here
    float a  = 1.1234;
    int b = (int)(a*(1<<10));
    int c = (int)(a*pow(2,10));
    cout << "\n a = " << a << " b = " << b << " c = " << c;
    return 0;
}

输出a = 1.1234 b = 1150 c = 1150

在哪种情况下,两个输出(bc)会有所不同?

2 个答案:

答案 0 :(得分:9)

int b = (int)(a*(1<<10));

这里,由于110都是整数,因此您对整数而不是浮点数执行左移操作。

答案 1 :(得分:3)

在两种情况下,您将1024与a(1.1234)的值相乘。 这并不意味着你正在改变浮动值。