C ++十进制转换为Binary,如何转换?

时间:2018-10-31 15:29:14

标签: c++

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

long long decimal_to_binary(int n) {
    long long bn = 0;
    int rem, i = 1;

    while (n != 0) {
        rem = n % 2;
        n /= 2;
        bn += rem * i;
        i *= 10; 
    }
    return bn;
}
    int main(){
    int a,b,c;
    cin >> a >> b >> c;
    cout << decimal_to_binary(a) << " " << std::oct << a << " " << std::hex << a << '\n';
    cout << decimal_to_binary(b) << " " << std::oct << b << " " << std::hex << b << '\n';
    cout << decimal_to_binary(c) << " " << std::oct << c << " " << std::hex << c << '\n';
}

您输入3个十进制数字,并以二进制,八进制和十六进制打印。

当我输入 2,8,15 时,它应该打印:

  

10 2 2

     

1000 10 8

     

1111 17 F

但是可以打印

  

10 2 2

     

3e8 10 8

     

457 17 f

你能指出我所缺少的吗?

2 个答案:

答案 0 :(得分:4)

通常,当某人谈论“十进制”或“二进制”时,他们谈论的是值的 text 表示形式,而不是内部表示形式。尽管您可以随意使用该值,并且可以创建一个可以显示的整数值,使其看起来像二进制值,但这并不是特别有用。您需要做的是将整数值转换为代表其二进制值的 text

std::string to_binary(unsigned i) {
    std::string result;
    while (i != 0) {
        if (i % 2)
            result.append(1, '1');
        else
            result.append(1, '0');
        i /= 2;
    }
    std::reverse(result.begin(), result.end());
    return result;
}

int main() {
    std::cout << to_binary(3) << '\n';
    return 0;
}

如果需要将值显示为十进制,八进制或十六进制,则可以使用流操纵器来更直接地做到这一点:

std::cout << std::hex << 3 << '\n'; // display value as hex
std::cout << std::dec << 3 << '\n'; // display value as decimal
std::cout << std::oct << 3 << '\n'; // display value as octal

但是,没有用于将值显示为二进制的操纵器,因此您必须自己滚动。

答案 1 :(得分:3)

您可以只使用std::bitset来获取数字的二进制表示形式:

std::string decimal_to_binary(int n) {
  return std::bitset<32>(n).to_string();
}

您当前的实现在任何数量上都会惨败(至少是因为long long在您的情况下最多只能保留约18个小数位或位数)。

在此处查看其工作方式:https://ideone.com/hDNWbe