Yahoo Clever wird am 4. Mai 2021 (Eastern Time, Zeitzone US-Ostküste) eingestellt. Ab dem 20. April 2021 (Eastern Time) ist die Website von Yahoo Clever nur noch im reinen Lesemodus verfügbar. Andere Yahoo Produkte oder Dienste oder Ihr Yahoo Account sind von diesen Änderungen nicht betroffen. Auf dieser Hilfeseite finden Sie weitere Informationen zur Einstellung von Yahoo Clever und dazu, wie Sie Ihre Daten herunterladen.
Wie fasst man nummerierte Eigenschaften in einer Zahl zusammen?
Also, ich ich versuche meherere Eigenschaften, die entweder zutreffen oder nicht in einer Zahl zusammenzufassen, um die Rechte in meinem eigenen CMS festzulegen. Jeder Benutzer soll so eine Nummer zugewiesen bekommen. Dazu hab ich mir überlegt das ich für Eigenschaft 1 (Recht, Beiträge zu schreiben) die Zahl 2, Eigenschaft 2 (Recht, eigene Beiträge zu editieren) die Zahl 4, Eigenschaft 3 (Recht, andere Beiträge zu editieren) die Zahl 8, Eigenschaft 4 (Recht, in HTML zu schreiben) die Zahl 16 usw. zuweise und die entsprechend gegebenen Rechte(/Eigenschaften) addiere. Ich glaube, wenn ich nicht total bescheuert bin, hat keine Eigenschaften-Kombination die gleiche Zahl mit einer anderen Eigenschaften-Kombination. Wie rechne ich das jetzt auseinander, wenn ich die zusammenfassende Zahl habe, und prüfen will, ob z.B. Eigenschaft 3 zutrifft? Oder ist das alles humbug?
2 Antworten
- Anonymvor 1 JahrzehntBeste Antwort
Im prinzip hat der Vorredner ja schon malk gesagt, das der Ansatz stimmt, allerdings würde ichj deine Rechte-Zahl nicht wieder dezimal auseinander dröseln, das ist viel zu kompliziert, wählst du dagegen die Binär-Darstellung wird deine Kennziffer ganz deutlich:
1 = 0000 0001
2 = 0000 0010
4 = 0000 0100
8 = 0000 1000
16=0001 0000
32=0010 0000
64=0100 0000
128=1000 0000
Duj siehst, die 1 steht jeweils eine Stelle weiter
und jetzt entschlüssele mal 153 bzw Binär dargestellt 1001 1001
in der Binär-Darstellung sieht man sofort: 153 = 128 + 16 + 8 +1 ohne überhapt rechnen zu müssen,
- toxy³ ™Lv 7vor 1 Jahrzehnt
nein, is kein humbug, wird oft so gemacht.
vorgehensweise ist aber ein bisserl anders. (genaue syntax kommt auf die sprache an, weil du nicht sagst, womit du arbeiten willst, kriegstes in C++)
angenommen "rechte" ist eine vorzeichenlose integer variable
zuweisung mit "logischem oder"
rechte = rechte | 16
andere sprachen zb:
rechte = rechte or 16
man kann die 16 auch mit nem leftshift ersetzen
wert = 1 << 3
wuerde ne 8 erzeugen weil << die 1 um entsprechend viele stellen nach links schiebt (im binaersystem)
abfragen ob ein wert gesetzt ist mit logischem und:
x = rechte & 16
jetzt steht in x nur ein wert, wenn das bit in rechte gesetzt war.
allerdings ist das ein ziemliches gefriemel und einfach ein array mit booleans zu nehmen ist einfacher. sollte man sich ueberlegen, ob ein paar byte mehr den aufwand rechtfertigen.