• ベストアンサー

10進数を2進数に変換するには・・・

前にも質問された方がいらっしゃるかもしれないですが検索してもわからなかったのでお願いします。 C言語で10進数を2進数に変換するためにはprintf文を使用して表すことはできないですよね?どうすればよいですか? 例えば10進数である214を2進数の11010110というのに変換したい場合プログラムではどのようになるのでしょうか? 基本的なことですみませんがお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rentahero
  • ベストアンサー率53% (182/342)
回答No.4

#3のttyp03さんが紹介しているものと考え方は同じなので、書こうかどうか迷ったのですが、一応別アイディアをいれて書いてみました。 #include <stdio.h> #include <limits.h> #define MAXBIT sizeof(src) * CHAR_BIT int main() {   char src=214;   char dst[MAXBIT + 1];   int i, startbit;   for(i = 0; i < MAXBIT; i++)   {     if(src & (1 << i))     {       dst[MAXBIT - i - 1] = '1';       startbit = MAXBIT - i - 1;     }     else     {       dst[MAXBIT - i - 1] = '0';     }   }   dst[MAXBIT]='\0';   printf("%s\n", dst);   printf("%s\n", dst + startbit);   return 0; } 0サプレスありと0サプレスなしの機能および変数の型から自動的に桁数を計算するように実装してみました。 あと、インデントは全角でやってあるので、そのままコピペしちゃだめです。

kaiji12345
質問者

お礼

ありがとうございます。 ttyp03さんと同じ考え方なのですね。 難しそうですがよく考えて参考にさせていただきます。 rentahiroさんのアイデアで書いていただいてありがとうございます。

その他の回答 (3)

回答No.3

2で割って余りから2進数を求める方法をとりました。 初歩的な標準ライブラリ関数しか知らないので、そのままの手順で書いてみました。 #include <stdio.h> #include <stdlib.h> #define MAX 100 int main() {  int decimal, i, tmp;  int binary[MAX];  printf("10進数で入力して下さい: ");  scanf("%d", &decimal);  tmp = decimal;  /* いらないかもしれないけど初期化 */  for(i = 0; i < MAX; i++)   binary[i] = 0;  /* 2進数の計算 */  i = 0;  while(1)  {   /* 配列binaryに代入できる上限を超えたら強制終了 */   if(i == MAX)   {    printf("表示制限を超えました\n");    exit(1);   }   binary[i] = tmp % 2;   tmp = tmp / 2;   if(tmp == 0)    break;   i++;  }  /* 逆順に表示することで2進数を表示 */  printf("%dを2進数で表すと\n", decimal);  for(; i >= 0; i--)   printf("%d", binary[i]);  printf("\nになります\n");  return 0; }

kaiji12345
質問者

お礼

w( ̄o ̄)w オオー!なるほど。ありがとうございます。 10進数を2で割った余りを逆順に表示すればいいんですね。 コメント文で行っている処理も書いてくれてわかりやすいです。 参考にさせていただきます。

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.2

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1570137 こちらに僕が以前回答したプログラムが掲載してあります。 #5です。 参考にしてください。 一応解説しておきます。 10進数を2進数に変換、という言葉自体がおかしいです。 例えばint型の値は10進数でもあり2進数でもあるわけです。 ですから変換というよりは表示の仕方になります。 上記URLに掲載したソースはint型の数値の各ビットを頭から表示しているにすぎません。

kaiji12345
質問者

お礼

ありがとうございます。 そういえば掲載してあるページも見た覚えがあります。 是非参考にさせていただきますペコリ(o_ _)o)) なるほど。変換という表現はおかしいんですね。 表示と言えばいいんですね。 解説もありがとうございます。 掲載されているのを参考に勉強させていただきます。 ありがとうございました。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

この質問の上のほうにある検索ボックスに「2進数」と入れて検索すると127件(現在時点)出てきます。参考になるのではないでしょうか。 ついでに、検索システム構築のときの参考になりそうなので、どんな検索を行ったのかも知りたいです。

kaiji12345
質問者

お礼

ありがとうございます。

kaiji12345
質問者

補足

xcrOSgS2wYさんがおっしゃってた通り、2進数などと検索して探してみました。 C++のプログラムは見つかりましたがCのほうが見つからなくて…。 そして10進数の数を2で割っていって、その余りを右詰めにすることで2進数で表すことができるということが書いてありました。 検索では『2進数 10進数 変換』など絞込み検索もしました。←こんな感じでいいんですか?

関連するQ&A

  • 2進数から10進数へ変換

    C言語で、2進数から10進数に変換するプログラムを作ろうと思っています。 手計算で行う場合は2進数の 下1桁目×1 下2桁目×2 下3桁目×4。。。と計算しています。 下○桁目を取り出す方法を考えているのですが、思いつきません。 3桁の2進数を変換するプログラム(とりあえず101を変換することを考えて・・・)を書いてみたのですが、101を考えすぎたためか上手くいきませんでした。 最終的には10進数でintの範囲内程度の2進数の変換ができるプログラムを書きたいと思っています。 アドバイスをお願いします。 ちなみに、考えてみたプログラムは以下の通りです。 101以外で上手く変換できませんね・・・ ここに貼り付けるのが恥ずかしいです。 #include <stdio.h> main() { int x ,i ,z[3]; scanf("%d",&x); z[0]=x/100*4; z[1]=(x/10-10)*2; z[2]=(x-110)*1; printf("%d",z[0]+z[1]+z[2]); return 0; }

  • 3進数を10進数に変換

    3進数や5進数のように2の階乗ではない任意の進数の文字列を、C言語のビットシフトを使って10進数に変換するプログラムについて、質問させていただきます。 ビットシフトを使わないで、任意の進数の文字列を10進数に変換する方法は分かっていますが、ビットシフトを使った方が非常に計算が高速で出来るので、ビットシフトを使いたいと思っています。 下記のプログラムは4進文字列を10進整数に変換するものです。2進、8進文字列の場合は、シフトするビット数を1ビット、3ビット(つまり、ans <<= 1、ans <<= 3)にすれば計算することが可能です。しかし、3進数や5進数の場合、いろいろと考えたのですが、どのようにすれば良いのか分かりません。 下記のプログラムのようにビットシフトを使って3進数や5進数の文字列を10進数に変換するには、どのように工夫すれば良いでしょうか? どなたかご教授をお願いいたします。 #define STRING_NUM 2 /* 文字列の長さ */ int main(void) { int i; int ans = 0; /* 10進数の整数 */ char buf[STRING_NUM]; /* 4進数の文字列 */ buf[0] = '3'; buf[1] = '1'; for ( i = 0 ; i < STRING_NUM; i++ ){ printf(" %c", buf[i]); } printf("\n"); for ( i = 0 ; i < STRING_NUM; i++ ){ if ( buf[i] == '0' ){ ans <<= 2; /* シフトするビット数 */ ans |= 0; } if ( buf[i] == '1' ){ ans <<= 2; ans |= 1; } if ( buf[i] == '2' ){ ans <<= 2; ans |= 2; } if ( buf[i] == '3' ){ ans <<= 2; ans |= 3; } } printf( "ans = %d\n", ans ); return 0; }

  • 8桁の2進数を10進数に変換する方法を教えてください。

    キーボードから2進数を入力した値を10進数に変換し、変換結果を出力する方法が解りません。作成するにあたり仕様があり、私一人では解決できないので相談させていただきました。 <仕様は以下の通りです> (1)このプログラム(8桁の2進数を10進数に変換)をする際は、最後に出力する時(printf)以外は関数を使ってはいけません。 (2)キーボードから2進数を入力させる。 (3)空白(ブランク)が入力されても変換可能にする。 (4)入力された2進数は8桁にし、8桁以上の場合はエラーを出す。 (5)2進数の「0」と「1」以外の文字が入力された場合はエラーを出す。 (6)バイナリ変換をし、変換結果を出力する。 以上になります。 まだ、C言語を勉強を習い始めの初心者です。どうか、ご回答のほど宜しくお願いします。

  • 10進数を2進数に変換したいのですが・・・

    こんばんは。 入力された10進数を2進数に変換するというプログラムを、一応作成することができたのですが、表示される結果が逆に表示されてしまいます。(例えば、4なら001) どのようにすれば、正しく表示することができるのでしょうか??ちなみにプログラムは #include<stdio.h> int main(void) { int num; printf("数字を入れてください。\n"); scanf("%d", &num); for(num = num ; num>1 ; num = num/2) printf("%d",num%2); printf("%d\n",num); return 0; } です。

  • 素数プログラムの解読、

    C言語のプログラムで素数を求めるプログラムで、 //入力された数字が素数がどうかを求めるプログラムです。 #include<stdio.h> main() { int a,c; //aはそれが素数かどうか調べたい数字です。 printf("aに何か好きな整数をいれてください。\n"); printf("a="); scanf("%d",&a); c = 2; while ( a%c ){ c += c%2+1; printf("途中計算 %d\n",c); } if ( a > 1 && c == a ){ printf("素数です。\n"); }else{ printf("素数ちゃうよ。\n"); } } というのを作りました。このプログラムは 教えてgooの回答欄にあったものを自分で いじったものですが、 c = 2; while ( a%c ){ c += c%2+1; printf("途中計算 %d\n",c); } の部分が何をしているのかが、わかりません。 printf("途中計算 %d\n",c); は 何をしているかが解るかもしれないと思い 自分で付足しましたが、やっぱりわかりません。 だれか解る方お願いします。

  • 10進数から2進数への変換

    こんにちは。 10進数から2進数への変換をせよという問いの場合、2で割っていくというのが基本的な考えですよね。割り算を使わずに10進数から2進数に変換する方法というのはあるのでしょうか?ご存知の方いましたらご教授ください。

  • 10進数を16進数に変換

    c言語で文字列に含まれる10進数部分を16進数に変換する方法を教えてください。  sdkk161h→sdkkA1h 161 →  A1

  • C言語のソースをC++言語に変換したい

    C言語で書かれていたソースをC++言語に変換したいのですが どのような点に気をつければよいでしょうか 現在、プログラムの主な構造は構造体とそれを扱う関数が実装されていて、 これらをクラスを使用して書き換えようと思います。 それ以外に気にしておくものはありますか。 例えば、ヘッダファイルで<stdio.h>をインクルードしているところがありますが、 これは<cstdio>に書き換えたほうがよいかもしれない、と言われたことはあります。 printfなどはprintfのまま使用しても大丈夫ですか。 std::printfに書き換えたり、iostreamを使用する方法に書き換えたほうがいいですか。 規格としてはどのようになっているのでしょうか。 (「過去との互換性のためにあるだけであり、非推奨」とかあったりしますか。)

  • 2から120以下の素数を求める

    2以上120以下の素数を全て求めて表示するプログラムを書きなさい。 素数か否かの判定には以下のアルゴリズム[処理手順] (2 <= n <= 120のときのみ有効)を用いなさい。 i) nが2, 3, 5, 7, 11のうちのどれかと等しければNは素数 ii) nが2, 3, 5, 7, 11の全てに対して割切れなければNは素数 iii) それ以外(iもiiも不成立)のとき、Nは素数ではない。 *) 2, 3, 5, 7, 11は最初に出力してしまい、 n=12から120までをfor文のなかで判定すればよい。 というC言語の課題です。 自分でプログラムを作ったのですが、うまくできません・・。 if文が働いてないようなのですが、どこが間違っているのでしょうか? #include <stdio.h> int main(void) { int i; printf("2\n"); printf("3\n"); printf("5\n"); printf("7\n"); printf("11\n"); for (i=12;i<=120;i++){ if (i%2!=0 || i%3!=0 || i%5!=0 || i%7!=0 || i%11!=0){ printf("%d\n",i); } else{ printf(""); } } printf( "\n" ); return 0; }

  • 独学で最近c言語を始めたものです。10進数を16進数に変換するプログラ

    独学で最近c言語を始めたものです。10進数を16進数に変換するプログラムを作りました。 しかしコンパイルしてもエラーは出ないのですがprintfの部分で配列の結果のみが出ません。 如何せん、独学ですので気付かないところで簡単なミスをしているかもしれませんが、分かる方がいましたご教授ください。 #include<stdio.h> int main() { static char data[16]= {'1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char hex[5]; short dec,num,i; for(;;){ for(i=0;i<=3;i++) hex[i]=' '; hex[4]='\0'; printf("10進数を入力してください。>>"); scanf("%d",&dec); if(dec==0) break; for(i=3;dec!=0;i--){ num=dec%16; dec/=16; hex[i]=data[num]; } printf("16進数は%sです\n",hex); } }

専門家に質問してみよう