2017-10-27 12 views
1

大きな値を書き込むと、奇妙な値が返されますが、たとえば2000を書いたときなど、数値をbianryに再変換する関数を作成しています。それは私に-1773891888の結果を与えます。デバッガでこの関数を実行すると、最後の2秒まで2進数で2000という正しい値が得られます。 ありがとうございます! C++で再帰関数を使用したバイナリ変換で奇数が返される

#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

これは大きなコードの一部ですが、これは一部に過ぎませんが、ご希望の通り – polmonroig

答えて

4

整数値缶(通常-2 +2に - 1)有界範囲内にのみ格納値、20億と変化周りアウトmaxes。つまり、10桁を超えるバイナリ値を整数に格納しようとすると、この上限がオーバーフローします。ほとんどのシステムでは、これにより値が折り返され、負の出力になります。

この問題を解決するには、論理的に言えば、実際に返す数値は、あなたが望む10の整数ではないので、std::stringが整数ではなくビットを格納することをお勧めしますにさらに算術演算を行うこれにより、整数のオーバーフローを危険にさらすことなく、必要な長さのバイナリシーケンスを生成できます。

少なくともあなたのロジックは正しいです!

+0

大丈夫でしょうか?2000年が範囲内にあるため、私は考えていませんでした。文字列。どうもありがとうございました!! – polmonroig

関連する問題