• 締切済み

数値から2進数の文字列変換

ある数値を2進数の文字列に変換したい関数を作りたいのですが、うまく出来ません。 2進数表示させるのに、シフト演算を使いたいのですがうまくいきません。 ヒントでもいいのでおしえてください。 ↓いちよう作ろうとしているプログラムです。 char *a(int atai){ int amari; char moji=0; while (atai != 0) { amari = atai % 2; atai = atai / 2; /*2進数表示させたい*/ } return moji;

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#include <stdio.h> char a(int atai){ char moji; moji=(atai % 2)? '1': '0'; atai/=2; if(atai!=0) putchar(a(atai)); return moji; } void main(void){ putchar(a(23)); }

W07A09
質問者

補足

>putchar とは、何ですか? 何を行っていますか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

あえて変態的に書いてみる: #include <stdio.h> void uitostr(unsigned int val, char *buf) { unsigned int mask = ~(~0U >> 1); while (mask && ! (val & mask)) { mask >>= 1; } if (mask == 0) { *buf++ = '0'; } else { for (; mask; mask >>= 1) { *buf++ = (val & mask) ? '1' : '0'; } } *buf = '\0'; } int main() { unsigned int a = 12; char buf[33]; uitostr(a, buf); printf("%u = %s\n", a, buf); return 0; }

noname#29127
noname#29127
回答No.1

かなりややこしいプログラムを作ってしまいました。 とりあえず2進数にはなります。 変数aの値を変えて実行してみてください。 再起、ポインタを使っているのでややこしいですが、他の方が もっと簡易なものを作られるかも。 #include <stdio.h> #include <stdlib.h> void saiki(int b,int *id,char ctmp[20]); main(){ char ctmp[20]; int id=0; int a=12; int i; saiki(a,&id,ctmp); for(i=id-1;i>=0;i--){ printf("%d",ctmp[i]); } printf("\n"); } void saiki(int b,int *id,char ctmp[20]){ int c; c=b % 2; b=(b-c)/2; ctmp[*id]=c; *id=*id+1; if(b>0) saiki(b,id,ctmp); }

関連するQ&A

専門家に質問してみよう