[C/C++] Bitoperation | , warum zur Initialisierung?



  • HAR schrieb:

    Wo liegen hier denn die Vorteile?

    du musst dir keine Funktion schreiben mit Parametern fuer jede einzelne Funktion und kannst so a) leichter die Falgs erweitern und bleibst Binaer kompatibel b) hast nen schoen kleinen/uebersichtlichen Funktionskopf und c) sparst Speicher und den Aufwand den die Uebergabe der Parameter brauchen wuerde



  • Sgt. Nukem schrieb:

    Soa, und jetzt überleg mal, warum man nicht '3', '5', etc. nehmen kann...!! :p

    Das stimmt so nicht ganz. Oft gibt es auch Geschichten wie

    enum {
      INIT_VIDEO = (1<<0),
      INIT_AUDIO = (1<<1),
      INIT_THE_FULL_MEDIA_SHOW = INIT_VIDEO | INIT_AUDIO
    };
    


  • finix schrieb:

    Sgt. Nukem schrieb:

    Soa, und jetzt überleg mal, warum man nicht '3', '5', etc. nehmen kann...!! :p

    Das stimmt so nicht ganz. Oft gibt es auch Geschichten wie

    enum {
      INIT_VIDEO = (1<<0),
      INIT_AUDIO = (1<<1),
      INIT_THE_FULL_MEDIA_SHOW = INIT_VIDEO | INIT_AUDIO
    };
    

    Und was soll mir das sagen!??



  • Wo's grad so schoen zum Thema passt:

    kennt jemand ein gutes Tutorial o. AE. zum Thema Bitshifting/Bitoperationen in C++ (oder von mir aus auch reines C, sollte ja nicht so stark der Unterschied sein)... hab bisher noch kein Buch gesehn in dem das erklaert wird... *g*, nicht mal im Stroustrup, den ich eigentlich als komplette Sprachreferenz betrachte (bin jetzt bei Seite 400irgendwas, und bisher nix davon gesehen 😉 )...

    P. S. ich brauch keine Erklaerung von Binaerzahlen, ich kann die lesen, ich kann damit rechnen, ich kann sie nur nicht... shiften 😃



  • Blue-Tiger schrieb:

    ich kann sie nur nicht... shiften 😃

    x << y;

    Das verschiebt die Bits in 'x' um 'y' Bits nach links und gibt den Wert zurück.



  • Und was soll mir das sagen!??

    das 1 oder 2 3 ist und deshalb Zahlen, wie 3 doch verwendet werden.



  • Helium schrieb:

    Und was soll mir das sagen!??

    das 1 oder 2 3 ist und deshalb Zahlen, wie 3 doch verwendet werden.

    Ja klar, aber eben nicht für VERSCHIEDENE Flags...

    Ich kann nicht INIT_VIDEO 3 machen und INIT_AUDIO 1 und diese dann GETRENNT setzen...



  • Natürlich. Ich wollte nur erklären, was gemeint war. Was finix gesagt hat war pedantisch, aber prinzipell hat er recht.



  • DrGreenthumb schrieb:

    Blue-Tiger schrieb:

    ich kann sie nur nicht... shiften 😃

    x << y;

    Das verschiebt die Bits in 'x' um 'y' Bits nach links und gibt den Wert zurück.

    d.h. aus einem

    int i = 0x00000010;

    wuerde durch ein

    i << 3;

    ein

    0x00010000

    😕

    Shiftet >> dann nach rechts, oder?

    und was, wenn ich nur ein einziges Bit setzen/veraendern will?



  • Blue-Tiger schrieb:

    d.h. aus einem

    int i = 0x00000010;

    wuerde durch ein

    i << 3;

    ein

    0x00010000

    😕

    Ja, wobei die Schreibweise jetzt nicht ganz richtig ist. Mit 0x fangen in C Hexzahlen an.

    und was, wenn ich nur ein einziges Bit setzen/veraendern will?

    Dann brauchst du erstmal eine Bitmaske, wo nur das entsprechende Bit gesetzt ist.
    Nimm an du willst das 3. Bit setzen, dann nimmst du als Maske 1 << 2, weil 1 = 00000001 um 2 Bits verschoben ergibt 00000100.
    Willst du jetzt das dritte Bit in 'x' setzen, machst du

    x = x ODER bitmaske.

    In C:

    x = x | (1 << 2);
    

    Zum löschen dann UND statt oder. Siehe Post von Marc++us.
    Wobei du zum löschen die Bitmaske erst invertieren musst, sonst löscht du alle Bits ausser den einen.


Anmelden zum Antworten