0

我有这个代码:

#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

4 回答 4

3

你不能,这没有任何意义。十进制和二进制是数字的表示。十进制的十辆车与二进制的十辆车的数量相同。这是完全相同的数字。没有办法使用联合将一种整数表示更改为另一种。

于 2013-04-04T10:58:38.300 回答
1

由于该数字在内存中没有以十进制表示,因此您已经完成了这项任务,甚至没有使用联合。如果要获得二进制文本表示:

unsigned n = 12345;

for (int i = sizeof(n) * CHAR_BIT - 1; i >= 0; i--) {
    putc('0' + ((n >> i) & 1), stdout);
}
于 2013-04-04T11:03:06.810 回答
0

为什么?

联合只是一个结构,其中所有成员在内存中具有相同的位置(它们重叠)。

我不熟悉在创建二进制字符串时使用联合的任何典型方法,我认为这(很容易)根本不可能。

也许您在浮点数和整数之间转换时混淆了联合的使用(丑陋但有时用于获取浮点数的位)?

于 2013-04-04T10:59:33.467 回答
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;
}
于 2015-04-15T23:30:59.017 回答