Bitfeld addieren/subtrahieren [2]



  • Hallo,
    jetzt habe ich hier zwei Bitfelder und weis immernochnicht, wie ich die nun richtig addieren/subtrahieren kann. Wie würde dass den mit dem Übertrag aussehen ???

    Hier der Code

    #include <stdio.h> 
    
    int main(void) 
    { 
        union uni1 
        { 
            short input; 
            struct binarzahl1 
            { 
                unsigned b0 : 1; 
                unsigned b1 : 1; 
                unsigned b2 : 1; 
                unsigned b3 : 1; 
                unsigned b4 : 1; 
                unsigned b5 : 1; 
                unsigned b6 : 1; 
                unsigned b7 : 1; 
                unsigned b8 : 1; 
                unsigned b9 : 1; 
                unsigned b10: 1; 
                unsigned b11: 1; 
                unsigned b12: 1; 
                unsigned b13: 1; 
                unsigned b14: 1; 
                unsigned b15: 1; 
            }bitfeld1; 
        }univar; 
    
            union uni2 
        { 
            short input; 
            struct binarzahl1 
            { 
                unsigned b0 : 1; 
                unsigned b1 : 1; 
                unsigned b2 : 1; 
                unsigned b3 : 1; 
                unsigned b4 : 1; 
                unsigned b5 : 1; 
                unsigned b6 : 1; 
                unsigned b7 : 1; 
                unsigned b8 : 1; 
                unsigned b9 : 1; 
                unsigned b10: 1; 
                unsigned b11: 1; 
                unsigned b12: 1; 
                unsigned b13: 1; 
                unsigned b14: 1; 
                unsigned b15: 1; 
            }bitfeld1; 
        }univar2;
    
            printf("Short Zahl1 eingeben:"); 
            scanf("%u", &univar.input); 
    
            printf("Short Zahl2 eingeben:"); 
            scanf("%u", &univar2.input); 
    
            printf("%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u\n",
            univar.bitfeld1.b15, univar.bitfeld1.b14,univar.bitfeld1.b13, univar.bitfeld1.b12, univar.bitfeld1.b11, univar.bitfeld1.b10, univar.bitfeld1.b9,
            univar.bitfeld1.b8, univar.bitfeld1.b7, univar.bitfeld1.b6, univar.bitfeld1.b5, univar.bitfeld1.b4, univar.bitfeld1.b3, univar.bitfeld1.b2, 
            univar.bitfeld1.b1, univar.bitfeld1.b0);     
        return 0; 
    }
    


  • deine union funktioniert nicht. Machs am besten einfach mit nem normalen short.
    short Bitfeld = 9;
    dann kannst du auf Bit 1 so zugreifen:

    if(Bitfeld & 1<<0)
        printf("Bit 0 ist 1");
    if(Bitfeld & 1<<1)
        printf("Bit 1 ist 1");
    .
    .
    .
    

    Das mit dem Übertrag geht so:

    struct binaerzahl
            { 
                unsigned b0 : 1; 
                unsigned b1 : 1; 
                unsigned b2 : 1; 
                unsigned b3 : 1; 
                unsigned b4 : 1; 
                unsigned b5 : 1; 
                unsigned b6 : 1; 
                unsigned b7 : 1; 
                unsigned b8 : 1; 
                unsigned b9 : 1; 
                unsigned b10: 1; 
                unsigned b11: 1; 
                unsigned b12: 1; 
                unsigned b13: 1; 
                unsigned b14: 1; 
                unsigned b15: 1; 
            }bitfeld1, bitfeld2; 
    bitfeld1.b1=1;
    bitfeld1.b2=0;
    //alle anderen bits initialisieren.
    
    binaerzahl Addiere(binaerzahl Bitfeld1, binaerzahl2 Bitfeld2)
    {
        binaerzahl Summe;
        Summe.b0 = Bitfeld1.b0+Bitfeld2.b0;
        Summe.b1 = Bitfeld1.b1+Bitfeld2.b1+Summe.b0%2;
        ...
        Summe.b0 %= 2;
        Summe.b1 %= 2;
        ...
        return Summe;
    }
    

    [ Dieser Beitrag wurde am 12.06.2003 um 22:04 Uhr von dEUs editiert. ]



  • Hi,

    mal so aus Neugierde. Warum bestehst Du auf diese Struktur, wenn man das auch einfacher haben kann ?

    grüße Con@n

    [ Dieser Beitrag wurde am 12.06.2003 um 23:24 Uhr von Con@n editiert. ]


Anmelden zum Antworten