C使用union将十进制数转换为二进制数

时间:2013-04-04 10:56:36

标签: c binary unions

我有这段代码:

#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将十进制数转换为二进制数

我该怎么做?

4 个答案:

答案 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;
}