【问题标题】:bitwise conversion of decimal numbers to binary十进制数到二进制的按位转换
【发布时间】:2024-01-06 06:33:01
【问题描述】:

对于某些值,例如 10 的代码工作正常,输出为 1010,这是正确的,但对于 20、50 或 51,输出是错误的,或者至少在我看来是这样。 请帮忙!

 #include <iostream>
    #include <math.h>
    using namespace std;

int main()
{

    int n;

    cin >> n;

    int ans = 0;

    int i = 0;

    while (n != 0)
    {

        int bit = n & 1;

        ans = (bit * pow(10, i)) + ans;

        n = n >> 1;

        i++;
    }

    cout << " Answer is " << ans << endl;
}

【问题讨论】:

  • “对于 20 或 50 或 51,输出是错误的,或者至少在我看来是这样的” 那么在这些情况下输出是什么
  • 只要记住你所有的数字都已经以二进制形式存储在内存中(所以位模式就在那里)。所以将位 (2^n) 与 (10^n) 结合起来有点奇怪。在 pow 之上是浮点函数。所以我认为你需要重新考虑你的代码。你可能想看看这里:learncpp.com/cpp-tutorial/bitwise-operators
  • 我真的不知道这是否只是我的编译器的问题,但我尝试将 ans 变量的数据类型从(int 改为 float),它工作得非常好,真的不知道原因对于我的编译器二进制值 6 、 20 、 51 分别为 109、 10098 、 11010 的 ans 是 int 数据类型的情况,这里的答案是 109、10098、11010

标签: c++ binary decimal


【解决方案1】:

在尝试运行您的代码后,它可以工作。 51 正确显示为 110011,50 显示为 110010,20 显示为 10100。这些是正确的位值,您可以尝试通过计数或仅以不同方式添加 10(即 1010)来计算它们。

【讨论】:

  • 非常感谢你,我的家伙,代码是 fien 我猜我的编译器有一些问题我将 ans 变量的数据类型从 int 更改为 float,并且代码在 6、20 的答案之前工作得非常好, 51 分别为 109 , 10098 , 11010