我正在创建一个使用递归函数将数字转换为bianry的函数,但是当我写出大值时,它给我一个奇数值,例如,当我写2000时它给出了-1773891888的结果。当我使用调试器跟随函数时,它给出了二进制2000的正确值,直到最后一秒。 谢谢!!
#include <iostream>
int Binary(int n);
int main() {
int n;
std::cin >> n;
std::cout << n << " = " << Binary(n) << std::endl;
}
int Binary(int n) {
if (n == 0)return 0;
if (n == 1)return 1;
return Binary(n / 2)*10 + n % 2;
}
答案 0 :(得分:4)
C ++中的整数值只能存储有界范围内的值(通常为-2 31 至+2 31 - 1),最大值约为20亿并且更改。这意味着如果您尝试在整数中存储一个超过十位的二进制值,您将超出此上限。在大多数系统中,这会导致值环绕,因此负输出。
要解决这个问题,我建议让你的函数返回std::string
存储位而不是整数,因为从逻辑上讲,你返回的数字实际上不是你输入的10的整数。我喜欢做进一步的算术运算。这将允许您生成所需长度的二进制序列,而不会有整数溢出的风险。
至少你的逻辑是正确的!