Bit-Verschiebung



  • Hallo,

    Ich bin dabei C zu lernen und bin gerade bei Bit-Verschiebung angekommen. Die Übungsaufgabe lautet wie folgt:

    int a = 2, b = 5;
    
    d = b << a;
    

    Da ja die Dezimalzahl 5 in Binärcode 101 ist und 2 Stellen nach Links gerückt werden (die Zahlen am Rand herausfallen und am rechten Ende 2 Nullen aufgefüllt werden) müsste das Ergebnis in Binär 100 sein was die Zahl 4 in Dezimalzahl ist (also d = 4; ). Jedoch soll laut der Seite das Ergebnis d = 20; (was die Binärzahl 10100 sein soll) sein. Was hab ich falsch gemacht?

    MfG



  • Ein int hat mindestens 16 Bit. Also ist die 5 nicht 101 sondern 0000000000000101
    Klar kann man führende Nullen unterdrücken, man darf das aber nicht vergessen.



  • Ah, stimmt. Danke :).

    Und wann hat int 16 Bit und wann 32 Bit?



  • bis 20:00 16 bit, danach 32. (kleiner scherz)

    ernst-technisch gesehen, ist das vom standard nicht festgelegt und
    maschinenabhängig.
    wieviel von den dingern dein pc hat, googel mal nach sizeof operator.



  • thewolf16 schrieb:

    Ah, stimmt. Danke :).

    Und wann hat int 16 Bit und wann 32 Bit?

    das ist nicht festgelegt, der c-standard hat hier keine festen vorgaben, aber 32-bit (4Byte) sind "Quasi-Standard", d.h. mit 99%iger wahrscheinlichkeit ist ein int auf deinem computer 32-bit.

    das ist aber für dieses beispiel nicht wichtig, und die führenden nullen muss man auch nicht berücksichtigen.

    #include <stdio.h>
    
    int main()
    {
         printf("int = %d Bytes = %d Bits\n",sizeof(int),sizeof(int)*8);
         return 0;
    }
    

    so findest du die bitzahl eines integers auf deinem computer raus. auf den meisten computern (auch auf deinem wahrscheinlich) steht da:
    int = 4 Bytes = 32 Bits

    und ja, d müsste in deinem "code" 20 sein.

    int d = 5 << 2;
    // bedeutet:
     b(101) << 2
       ^       ^
       b       a
    Ergebnis: 10100
                 ^^
                 Diese Nullen wurde hinzugefügt.
    

    http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm

    b(10100) ist d(20).

    alles korrekt.


Log in to reply