入力された変数を左に順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';
}
}
}
2進数表示
Re: 2進数表示
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 2進数表示
基本的な考え方は変わりません。111 さんが書きました:関数サブルーチンの場合での考え方が分からない状態でどのように
文字を列にするのか分からない状態です。
アドバイス頂けないでしょう
次の文字が0か1かをシフトを用いて判定し、purcharで出力するかわりにpbufに順番に格納していけばいいでしょう。
ただし、pbuf(に渡すポインタ)が指す場所にはあらかじめ十分な領域が確保されていないといけません。
また、文字列の終端には終端文字'\0'を格納しないといけません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)