【问题标题】:c++ weird error with decimal to binary converterc++ 十进制到二进制转换器的奇怪错误
【发布时间】:2020-04-11 22:43:13
【问题描述】:

我是 C++ 编程的新手。我被赋予了将十进制编码为十六进制、八进制、二进制转换的任务。我在“binario”函数中遇到了错误,当我输入一个大于 1000 的十进制数时,该函数给我的结果是一个无意义的随机数。

int binario(int n){
    int r,val=0, i=1;
    while (n>0) {
      val=val+(n%2*i);
      n=n/2;
      i=i*10;
   }
   return val;
}


【问题讨论】:

  • 基数改变了数字的写入方式,它们根本不会改变它的值。将一个整数转换为 if print in base 10 看起来像 base 2 中的原始值的值......真的很奇怪。这真的是你想做的吗?
  • 计算机仅将数字存储为二进制。通过以您想要的格式创建数字的字符串表示来处理到输出的转换。将其作为 int 返回没有帮助,因为您不能将其用于计算。你也不能用这种方式表示十六进制数。

标签: c++


【解决方案1】:

在 C++ 中,int 的最大大小为 4 个字节,这意味着从 -2,147,483,648 到 2,147,483,647。 1024 的二进制是 10000000000,它超过了 int 范围。这就是您看到错误的原因。您可以将您的函数用于小于 1024 的数字。我建议您使用字符串作为您的函数(您必须包含字符串标题):

string binario(int n){
    string bin = "";
    while (n>0) {
      bin += to_string(n%2);
      n=n/2;
   }
   //reverse string
   for (int i = 0; i < bin.size() / 2; i++) {
    swap(bin[i], bin[bin.size() - i - 1]); 
   } 

   return bin;
}

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 2018-04-14
    • 2013-05-14
    • 2015-07-19
    • 2022-01-05
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多