#6
by shika » 6年前
具体的にプログラムを見た方が分かり良いと思うので、以下が参考に成るか分かりませんが、
一応は、簡単な実行確認済みです。もっと的確なプログラムが組んでいただければ幸いです。
困った時は、お互い様です。
コード:
/*
* binary's.c
*/
#include <stdio.h>
// 関数のプロトタイプ宣言
char binary(unsigned int i, int data);
void DecToBinarys(unsigned int dec, int *keta, int *b);
void BinarysToDec(unsigned int *dec, int keta, const int *b);
void BchToBin(const char *bc, int *keta, int *bin);
void dectobin(int data, char *b);
void main0(void);
void main1(void);
int main (void)
{
main0();
return 0;
}
void main0(void)
{
char b[32] = {0};
unsigned int dec;
while (printf("2進数列を入力して下さい(終了は、\'Ctrl\'+\'z\' です。):"), scanf("%s", b) != EOF)
{
int bin[32] = {0};
int i, k=0;
BchToBin(b, &k, bin);
BinarysToDec(&dec, k, bin);
printf("%s[bin] = %u[dec]\n", b, dec);
}
}
void main1(void)
{
char b[32] = {0};
unsigned int dec;
while (printf("整数を入力して下さい(終了は、\'Ctrl\'+\'z\' です。):"), scanf("%u", &dec) != EOF)
{
int bin[32] = {0};
int i, k;
printf("%u[dec] = ", dec);
DecToBinarys(dec, &k, bin);
for (i=0; i<k; i++)
printf("%d", bin[k-1-i]);
printf("[bin]\n");
}
}
char binary(unsigned int i, int data)
{
int a = 1, b;
a = (a << i);
b = '0' + ((data & a)? 1:0);
return b;
}
void dectobin(int data, char *b)
{
int i;
for (i=31; 0<=i; i--)
b[31-i] = binary(i, data);
b[32] = '\0';
}
void DecToBinarys(unsigned int dec, int *keta, int *b)
{
*keta = 0;
if (dec)
{
while (dec)
{
b[(*keta)++] = (dec & 1);
dec = (dec >> 1);
}
}
else
b[(*keta)++] = 0;
}
void BinarysToDec(unsigned int *dec, int keta, const int *b)
{
unsigned int i, a=1;
unsigned int d = 0;
for (i=0; (int)i<keta; i++)
{
if (b[(int)i])
d |= a;
a <<= 1;
}
*dec = d;
}
void BchToBin(const char *bc, int *keta, int *bin)
{
int i, k=0;
const char *p = bc;
while (*p++)
k++;
for (i=0; i<k; i++)
bin[i] = (int)(bc[k-1-i] - '0');
*keta = k;
}
具体的にプログラムを見た方が分かり良いと思うので、以下が参考に成るか分かりませんが、
一応は、簡単な実行確認済みです。もっと的確なプログラムが組んでいただければ幸いです。
困った時は、お互い様です。
[code]
/*
* binary's.c
*/
#include <stdio.h>
// 関数のプロトタイプ宣言
char binary(unsigned int i, int data);
void DecToBinarys(unsigned int dec, int *keta, int *b);
void BinarysToDec(unsigned int *dec, int keta, const int *b);
void BchToBin(const char *bc, int *keta, int *bin);
void dectobin(int data, char *b);
void main0(void);
void main1(void);
int main (void)
{
main0();
return 0;
}
void main0(void)
{
char b[32] = {0};
unsigned int dec;
while (printf("2進数列を入力して下さい(終了は、\'Ctrl\'+\'z\' です。):"), scanf("%s", b) != EOF)
{
int bin[32] = {0};
int i, k=0;
BchToBin(b, &k, bin);
BinarysToDec(&dec, k, bin);
printf("%s[bin] = %u[dec]\n", b, dec);
}
}
void main1(void)
{
char b[32] = {0};
unsigned int dec;
while (printf("整数を入力して下さい(終了は、\'Ctrl\'+\'z\' です。):"), scanf("%u", &dec) != EOF)
{
int bin[32] = {0};
int i, k;
printf("%u[dec] = ", dec);
DecToBinarys(dec, &k, bin);
for (i=0; i<k; i++)
printf("%d", bin[k-1-i]);
printf("[bin]\n");
}
}
char binary(unsigned int i, int data)
{
int a = 1, b;
a = (a << i);
b = '0' + ((data & a)? 1:0);
return b;
}
void dectobin(int data, char *b)
{
int i;
for (i=31; 0<=i; i--)
b[31-i] = binary(i, data);
b[32] = '\0';
}
void DecToBinarys(unsigned int dec, int *keta, int *b)
{
*keta = 0;
if (dec)
{
while (dec)
{
b[(*keta)++] = (dec & 1);
dec = (dec >> 1);
}
}
else
b[(*keta)++] = 0;
}
void BinarysToDec(unsigned int *dec, int keta, const int *b)
{
unsigned int i, a=1;
unsigned int d = 0;
for (i=0; (int)i<keta; i++)
{
if (b[(int)i])
d |= a;
a <<= 1;
}
*dec = d;
}
void BchToBin(const char *bc, int *keta, int *bin)
{
int i, k=0;
const char *p = bc;
while (*p++)
k++;
for (i=0; i<k; i++)
bin[i] = (int)(bc[k-1-i] - '0');
*keta = k;
}
[/code]