入力された変数を左に順1bitシフトして、その内容を表示
但し、printf文で2進数表示はできないので、変数を'0'と'1'の文字列に表示させるプログラム
を作っています。下記のプログラムコードで作っていますが、思ったような出力になりません
例えば5を入力した場合、 00000000 00000000 00000000 00000101のような出力にしたいのですが、
どのようにすればいいでしょうか?
#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 = '0';
}
else
{
amari = a % 2;
a = a / 2;
}
if (amari == 1)
{
pbuf = '1';
}
else
{
pbuf = '0';
}
}
}
2進数表示
Re: 2進数表示
コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
【訂正】すいません、左シフトでしたね。
↓間違えたソースコード
かつ適切なインデントをしていただけると、見やすくて助かります。
素直に出力すればいいと思います。111 さんが書きました:例えば5を入力した場合、 00000000 00000000 00000000 00000101のような出力にしたいのですが、
どのようにすればいいでしょうか?
#include <stdio.h>
int main(void)
{
int c = 0;
int d = 0;
scanf("%d", &c);
for (d = 31; d >= 0; d--)
{
putchar((c >> d) & 1 ? '1' : '0');
if (d > 0 && d % 8 == 0) putchar(' ');
}
putchar('\n');
return 0;
}
1bitずつシフトしないといけないという縛りがあるなら、こうでしょうか?111 さんが書きました:入力された変数を左に順1bitシフトして、その内容を表示
【訂正】すいません、左シフトでしたね。
#include <stdio.h>
int main(void)
{
int c = 0;
int d = 0;
scanf("%d", &c);
for (d = 0; d < 32; d++)
{
if (d > 0 && d % 8 == 0) putchar(' ');
putchar(c < 0 ? '1' : '0');
c <<= 1;
}
putchar('\n');
return 0;
}
► スポイラーを表示
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)