0

私は C++ の初心者で、今日は 10 進数を 2 進数に変換する小さなプログラムを自分で作成しようと考えました。コードは次のようになります。

#include <iostream>
void binaryConvert(int);
int main() {
    using namespace std;
    cout << "Enter decimal number for conversion:" << endl;
    int dec;
    cin >> dec;
    binaryConvert(dec);
}
void binaryConvert(int number) {
    using namespace std;
    while(number > 0) {
        int bin = number % 2;
        number /= 2;
        cout << bin;
    }
}

論理的には、このプログラムはバイナリを逆に出力します。このコードに出くわしたときに2進数が正しい方法で表示されるように、2進数の順序を逆にする方法を見つけようと長い時間を費やしました:

void binaryConvert(int number) {
    using namespace std;
    if(number > 0) {
        int bin = number % 2;
        number /= 2;
        binaryConvert(number);
        cout << bin;
    }
}

おそらくばかげた質問であることは知っていますが(私はまったくの初心者です)、このコードがビットを正しい順序で出力する理由がわかりません。また、 cout が実行される前に関数が再度呼び出された場合、ビットが実際に出力されるのはなぜですか?

4

6 に答える 6

2

基本的には、「binaryConvert」の後に「cout」が呼び出されるためです。これは、すべてのビットをスタックに入れてから、それらを出力するようなものです。

于 2012-11-25T17:45:32.043 に答える
0
int num;
string BinaryRepresentation="";
cout<<"Input:";
cin>>num;
string  newstring= "";

bool h;
h = true;

while(h){
    BinaryRepresentation += boost::lexical_cast<std::string>( num % 2 );
    num = num / 2;
    if ( num < 1){
        h = false;
    }
}
for ( int i = BinaryRepresentation.size() - 1; i >= 0; i--){
    newstring += BinaryRepresentation[i];

}
     cout<< "Binary Representation: " << newstring <<endl;

}

主なプログラムの考え方は、数字のリマインダを見つけて数字を 2 で割り、数字が 0 になるまで同じ手順を繰り返すことです。入力した番号。

于 2014-08-24T04:48:48.957 に答える
0

10 進数から 2 進数に変換するためにオンラインで検索していたときに、単純でわかりやすい解決策が見つかりませんでした。ということで、自分でプログラムを書きました。ここに行きます。

 #include <iostream>
#include <string>
#include <sstream>

using namespace std;
void dtobin(int n)
{
   ostringstream oss;
   string st="";
if(n<0)
{
    cout<<"Number is negative";
    return;
}
   int r;
while(n!=1)
{

    r=n%2;
    oss<<st<<r;
    n/=2;
}
oss<<st<<1;
st=oss.str();
cout<<st;
//To reverse the string
int len=st.length();
int j=len-1;
char x;
for(int i=0;i<=len/2-1;i++)
{
    x=st[i];
    st[i]=st[j];
    st[j]=x;
    --j;
}
cout<<endl<<st;
}


  int main()
{
  int n;
  cout<<"ENTER THE NUMBER";
  cin>>n;
  dtobin(n);
  return 0;
}
于 2015-12-31T17:21:34.207 に答える
0

あなたが正しく述べたように、あなたのプログラムは出力を与えたときにバイナリを反転させました。バイナリを正しい順序で配置するには、最後のビットが取得されると、2 番目のコードが出力を開始します。出力の順序はビンからビンへと進むため、目的の出力が得られます。次のコードは、さらに理解を深めるのに役立ちます: http://ideone.com/Qm0m7L

void binaryConvert(int number) {
    if(number > 0) {
        int bin = number % 2;
        number /= 2;
        cout << bin<<" one"<<endl;
        binaryConvert(number);
        cout << bin<<" two"<<endl;
    }
}

得られる出力は次のとおりです。

0 one
0 one
0 one
1 one
1 two
0 two
0 two
0 two

" one" の前にある出力は、プログラムが提供するものです。違いをご理解いただければ幸いです。

于 2014-08-26T12:58:41.883 に答える
0

再帰を利用し、最後のビンは基本ケースにヒットするまで出力されず (数値 <= 0)、その後スタック トレースに移動します。

于 2012-11-25T17:46:52.233 に答える
0

この関数は再帰的です。最上位桁を出力する前に、最下位桁を最初に出力するように再帰的に呼び出しています。

于 2012-11-25T17:47:32.463 に答える