ubuntuusers.de

[C] enum und bitwise-Operator

Status: Gelöst | Ubuntu-Version: Kubuntu 17.10 (Artful Aardvark)
Antworten |

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo zusammen!

Bin gerade beim Quellcode durchstöbern über eine enum-Deklaration in dieser Art gestolpert

1
2
3
4
5
6
7
8
9
typedef enum
{
    A = 1 << 0,
    B = 1 << 1,
    C = 1 << 2,
    D = 1 << 3,
...
    K = 1 << 10
} bla;

Nach kurzer Recherche fand ich heraus, dass man damit den enums feste Werte zuordnet, bitweise betrachtet also auf obiges Beispiel bezogen

A -> 0001
B -> 0010
...

Wo ist der Unterschied zu einem normalen enum, den ich als enum bla {A=1,B,C,...K}; definiere?

ChickenLipsRfun2eat Team-Icon

(Themenstarter)

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo Huhn, ich antworte dir mal selbst^^

Das pobige Beispiel ergibt die Werte 1, 2, 4, 8, 16,... und das normale definieren nur 1, 2 ,3 ,4...

Dadurch lassen sich die obigen mit | kombinieren. Danke!

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4686

Wohnort: Berlin

@ChickenLipsRfun2eat: Den Unterschied zu einer ”normalen” enum-Deklaration hast Du doch selbst beschrieben. Wobei das beides normale enum-Deklarationen sind.

Man kann die Werte die man so vergibt als Bitmasken verwenden, was mit fortlaufender Nummerierung nicht geht.


Edit: Wenn man die Werte mit | verknüpft hat man in aller Regel keinen Wert von dem Typ der enum mehr. Nur so als Hinweis. Also A | B ist nicht vom Typ bla, A und B aber schon.

ChickenLipsRfun2eat Team-Icon

(Themenstarter)

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Ja. Ich habs nur eben erst später verstanden. Manchmal bin ich halt auch einfach doof 😀

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

ChickenLipsRfun2eat schrieb:

Wo ist der Unterschied zu einem normalen enum, den ich als enum bla {A=1,B,C,...K}; definiere?

Ich vermute das wird an der Stelle gemacht um die einzelnen Werte bitweise addieren zu koennen, sodass du mehrere Optionen in einer Variable speichern koennen.

EDIT: ok, hab zu lange gewartet.

Antworten |