我有这段代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
long long int n,b,t,j;
while(scanf("%llu",&n) && n)
{
char a[2000]={0},c[2000]={0};
b=0;
int k=0;
while(n>0)
{
a[b++]=(n%2)+48;
if(n%2==1)
k++;
n=n/2;
}
a[b]='\0';
j=strlen(a)-1;
for(b=j,t=0;b>=0;b--)
c[t++]=a[b];
c[t]='\0';
printf("The parity of %s is %d (mod 2).\n",c,k);
}
return 0;
}
此代码工作正常。
现在我想使用C
中的union将十进制数转换为二进制数我该怎么做?
答案 0 :(得分:3)
你不能,这没有任何意义。十进制和二进制是数字的表示。十进制的十辆汽车与十二辆汽车的汽车数量相同。它的数字正好相同。没有办法使用union将一个整数表示更改为另一个。
答案 1 :(得分:1)
由于数字在内存中没有以十进制表示,因此您已经完成了此任务,甚至没有使用联合。如果您想获得二进制文本表示形式:
unsigned n = 12345;
for (int i = sizeof(n) * CHAR_BIT - 1; i >= 0; i--) {
putc('0' + ((n >> i) & 1), stdout);
}
答案 2 :(得分:0)
为什么?
联合只是一种结构,其中所有成员在内存中具有相同的位置(它们重叠)。
我不熟悉在创建二进制字符串时使用union的任何典型方法,我认为这根本不可能(很容易)。
也许你在浮点数和整数之间进行转换时会混淆使用联合(丑陋但有时习惯于得到浮点数的位)?
答案 3 :(得分:0)
#include <stdio.h>
#include <conio.h>
union calc
{
struct {
unsigned char bit0 : 1;
unsigned char bit1 : 1;
unsigned char bit2 : 1;
unsigned char bit3 : 1;
unsigned char bit4 : 1;
unsigned char bit5 : 1;
unsigned char bit6 : 1;
unsigned char bit7 : 1;
} bits;
unsigned char numero;
};
int main(int argc, char *argv[]) {
union calc c;
scanf("%u",&c.numero);
printf("%d%d%d%d%d%d%d%d",c.bits.bit7,c.bits.bit6,c.bits.bit5,c.bits.bit4,c.bits.bit3,c.bits.bit2,c.bits.bit1,c.bits.bit0);
getch();
return 0;
}