C言語で、2進数の正と負の整数を入力し、10進数へ変換するプログラムを作りたいのですが分かりません。

補足

2進数の負の整数は-1110のように入力します。

C言語関連100閲覧

ベストアンサー

0

ThanksImg質問者からのお礼コメント

ありがとうございました!

お礼日時:7/3 19:29

その他の回答(2件)

0

btoiの引数がバイナリの文字列だけでは厳しいので桁数を追加させていただきました。 #include <stdio.h> void bin2dec(int , char[] , int); long long my_pow(int , int); void btoi(char a[] , int n ){     int dec = 0;     int i , sign;     if(a[0] == '-') { i = 1; sign = 1;}     else {i = 0; sign = 0; }      for( ; i < n ; ++i){         if(a[i] == '1')         dec += my_pow(2 , n - i - 1);     }     if(sign) dec = - dec;     bin2dec( dec , a , n); } long long my_pow(int b , int e){     long long ret = 1;     if(e == 0) return ret;     int i;     for(i = 0 ; i < e ; ++i){         ret *= b;     }     return ret; } int get_digit( int n ){     int ret = 0;     while(n){         n /= 10;         ++ret;     }     return ret; } void bin2dec(int dec , char a[] , int n){     int sign;     if(a[0]=='-') { sign = 1; dec = -dec; }     else sign = 0;     int i , d = get_digit(dec);     for(i = 0 ; i < d ; ++i){         if(sign){             a[i+1] = dec / my_pow(10 , d - i -1) + '0';             dec %= my_pow(10 , d - i - 1);          }         else {             a[i] = dec / my_pow(10 , d - i -1) + '0';             dec %= my_pow(10 , d - i - 1);         }     }     if(sign) a[i+1] = '\0';     else a[i] = '\0'; } int main(){     char bin[33];     printf("input binary value > ");     scanf("%s" , bin);     int i , digits=0;     for( i = 0 ; bin[i] ; ++i){         ++digits;     }     btoi(bin , digits);     printf("decimal value : %s\n" , bin);     return 0; }

今見たら2進数の桁数の情報は関数内で調べられますから引数不要ですね。 void btoi(char a[]) だけで行けますが修正はご自分でお願いします。

0

まず、「2進数の負の整数」の表現方法を決めましょう。

符号を保存して、数字は、すでに得た値(初期値ゼロ)を2倍してその桁の0・1を足す、を最後まで繰り返して、符号を付ければOK