ページ 11

2進数表示

Posted: 2014年10月09日(木) 08:17
by 234
入力された変数を左に順1bitシフトして、その内容を表示
但し、printf文で2進数表示はできないので、変数を'0'と'1'の文字列に変換するサブルーチンとして関数を使う。
サブルーチンは以下の形式で行います。

void sub(a,pbuf)

int a;

char *pbuf;

下記のプログラムコードで作っていますが、思ったような出力になりません
例えば5を入力した場合、 
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00001010
00000000 00000000 00000000 00010100
のような出力にしたいのですが、
どのようにすればいいでしょうか?


#include<stdio.h>

void sub(int a, char *pbuf);

void main(void)

{


char a[32];
int c = 0;
int d = 0;

scanf_s("%d", &c);

sub(c, a);

printf("%s\n", a);

for (d = 0; d <= 32; d++);

{

c = (c << 1);

printf("%s\n", c);

}
}

void sub(int a, char *pbuf)

{

int amari = 0;
int i;

for (i = 0; i <= 32; i++)
{

if (a < 1)
{
pbuf[i] = '0';
}

else
{

amari = a % 2;
a = a / 2;

}

if (amari == 1)
{

pbuf[i] = '1';

}

else
{

pbuf[i] = '0';

}

}
}

Re: 2進数表示

Posted: 2014年10月09日(木) 08:38
by みけCAT
http://dixq.net/forum/viewtopic.php?f=3&t=15798
ここによく似た質問があります。
もし同一人物であれば、名前の統一をお願いします。

Re: 2進数表示

Posted: 2014年10月09日(木) 08:55
by 111
名前の統一を致します。
関数サブルーチンの場合での考え方が分からない状態でどのように
文字を列にするのか分からない状態です。

アドバイス頂けないでしょう

よろしくお願いします。

Re: 2進数表示

Posted: 2014年10月09日(木) 09:03
by みけCAT
111 さんが書きました:関数サブルーチンの場合での考え方が分からない状態でどのように
文字を列にするのか分からない状態です。

アドバイス頂けないでしょう
基本的な考え方は変わりません。
次の文字が0か1かをシフトを用いて判定し、purcharで出力するかわりにpbufに順番に格納していけばいいでしょう。
ただし、pbuf(に渡すポインタ)が指す場所にはあらかじめ十分な領域が確保されていないといけません。
また、文字列の終端には終端文字'\0'を格納しないといけません。