16 Flags in einer Var/einem Skill

Posted By: TripleX

16 Flags in einer Var/einem Skill - 07/09/05 16:44

Hallo

Da ich sehr oft in Scripts sehe, in denen wenn alle 8 Flags ausgeschöpft wurden, für jeden weiteren benötigten Flag ein Skill verschwendet wird, gehe ich hier einmal darauf ein, wie man über 16 Flags in einem einzigen Skill speichern kann.

(Hatte hier 2 Seiten Theorie, leider ist dann mein PC abgestürzt also komm ich gleich zum Code.. Vll. schreib ichs ja nochmal...mal sehen)

Alles was ihr hierfür braucht sind folgende Defines die ihr sehr weit an den Anfang eures Codes schreiben müsst.

Code:

DEFINE Flag1,1;
DEFINE Flag2,2;
DEFINE Flag3,4;
DEFINE Flag4,8;
DEFINE Flag5,16;
DEFINE Flag6,32;
DEFINE Flag7,64;
DEFINE Flag8,128;
DEFINE Flag9,256;
DEFINE Flag10,512;
DEFINE Flag11,1024;
DEFINE Flag12,2048;
DEFINE Flag13,4096;
DEFINE Flag14,8192;
DEFINE Flag15,16384;
DEFINE Flag16,32768;



Nun könnt ihr wie folgt Flags setzten/deaktivieren/abfragen:

Code:

my.skill1 = my.skill1 | Flag1; //setzt Flag1
my.skill1 |= Flag2; //setzt Flag2 (selbe wie my.skill1 = my.skill1 | Flag2;
my.skill1 |= Flag15; //Setzt Flag15
my.skill1 &= ~Flag1; //deaktiviert Flag1

if(my.skill1 & Flag15)
{
//falls Flag15 gesetzt ist
}



mfg
TripleX
Posted By: Jupp

Re: 16 Flags in einer Var/einem Skill - 07/10/05 09:31

Hallo,
Wenn ich einmal alle Flags verbraucht haben werde, dann werd' ich mich an diesen Thread erinnern.

Vielen Dank!
Jupp
Posted By: fogman

Re: 16 Flags in einer Var/einem Skill - 07/10/05 14:41

Doofe Frage vielleicht, aber woher weißt Du das,
bzw. wie bist Du drauf gekommen?

Alter Coderkönig...
Posted By: mk_1

Re: 16 Flags in einer Var/einem Skill - 07/10/05 14:49

Das sind Bitoperatoren. Wer weiß, wie sie funktionieren (kannst du in jedem besseren Elektronikhandbuch nachsehen oder halt im Netz), kann damit ne Menge Sachen machen.
Posted By: fogman

Re: 16 Flags in einer Var/einem Skill - 07/10/05 14:53

Ok, dank Dir
Werde ich mir mal ansehen.
Posted By: TripleX

Re: 16 Flags in einer Var/einem Skill - 07/10/05 14:58

Wie sie funktionieren war die 2 Seiten Theorie
Posted By: fogman

Re: 16 Flags in einer Var/einem Skill - 07/10/05 15:03

Tja war wohl ein Griff ins Klo...
Ist mir auch schon passiert, man schreibt einen halben Roman
und weg isses.

Vielleicht hast Du ja Lust es nochmal zu versuchen, hifreich wäre es allemal
Posted By: EX Citer

Re: 16 Flags in einer Var/einem Skill - 07/10/05 15:48

Ich erklärs mal mit drei Worten (oder mehr):

Das ist das Dualsystem. Das kleinste logische (soweit ich weiß) Zahlensystem.

Man kann an ihrem Produkt rauslesen aus welchen Zahlen es besteht solange jede Zahl nur einmal vorkommt.

Beispiel: 1+4+8 = 13 --> die Zahl 13 kann im Dualsystem immer nur durch 1+2+8 enstehen. Man kann nicht anders die dreizehn im Dualsystem darstellen: 1101

Das ist der 0/1 code von Maschinen. Hätten wir nur einen Finger hätten wir auch nicht das 10er Zahlensystem sondern das glorreiche Dualsystem (aber ein Finger ist auch nicht so doll).
Posted By: Wolfgang_Knecht

Re: 16 Flags in einer Var/einem Skill - 07/10/05 16:08

du kannst es dir so vorstellen:

Bit01=0000000000000001
Bit02=0000000000000010
Bit03=0000000000000100
Bit04=0000000000001000
Bit05=0000000000010000
Bit06=0000000000100000
Bit07=0000000001000000
Bit08=0000000010000000
Bit09=0000000100000000
Bit10=0000001000000000
Bit11=0000010000000000
Bit12=0000100000000000
Bit13=0001000000000000
Bit14=0010000000000000
Bit15=0100000000000000
Bit16=1000000000000000

wenn du jetzt also zumbeispiel Flag8, Flag3 und Flag11 setzten willst sieht das ja so aus:
Bit08=0000000010000000
Bit03=0000000000000100
Bit11=0000010000000000
======================
Ergeb=0000010010000100 = 1156

aus dem 1156 kannst du wieder eindeutig die selbe bitkombination folgern und somit rausfinden, welche flags gesetzt sind.
Posted By: fogman

Re: 16 Flags in einer Var/einem Skill - 07/10/05 16:10

Ihr seid klasse, danke

Anschaulicher geht es nicht mehr.
Posted By: TripleX

Re: 16 Flags in einer Var/einem Skill - 07/10/05 16:15

Sehr gut erklärt.. Über ODER (|) bzw. UND (&) Operatoren kannst du dann noch Flags setzten bzw. abfragen..

( 1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
bzw.
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
)

also:

my.skill1 |= Flag16 =


000000000000000 | 1000000000000000
= 1000000000000000

wenn du es jetzt noch mit Flag 2 verknüpfst passiert folgendes:

my.skill1 |= Flag2;

1000000000000000 | 0000000000000010
= 1000000000000010

Also das jeweilige 1. bis 16. Bit wird gesetzt.
Abfragen kannst du es mit den UND Operator..
Beispiel:

my.skill1 & Flag3

1000000000000010 & 0000000000000100
=0000000000000000 (nicht gesetzt)


my.skill1 & Flag2

1000000000000010 & 0000000000000010
=0000000000000010 (gesetzt da ungleich 0)


mfg
TripleX
Posted By: fogman

Re: 16 Flags in einer Var/einem Skill - 07/10/05 16:24

Nur um zu sehen, ob ich es gerafft habe,
bei flag16 würde die Abfrage so aussehen ?

my.skill1 & Flag16

1000000000000010 & 1000000000000000
=1000000000000000 (gesetzt da ungleich null)


Habe ich das so richtig verstanden?
Posted By: TripleX

Re: 16 Flags in einer Var/einem Skill - 07/10/05 16:35

ja
Posted By: mk_1

Re: 16 Flags in einer Var/einem Skill - 07/10/05 16:52

Nutzt man mit den Fingern das Dualsystem, kann man von 0 bis 1023 zählen! Rechte Hand fängt an, alle Finger eingeklappt.
Daumen: 1
Zeigefinger: 2
Daumen + Zeigefinger: 3
Mittelfinger: 4
Daumen + Mittelfinger: 5
Zeigefinger + Mittelfinger: 6
alle drei: 7
Ringfinger: 8
...
Posted By: TripleX

Re: 16 Flags in einer Var/einem Skill - 07/10/05 16:55

spannend marius

kann man sogar erklären... 2^10 = 1024.. beeindruckend oder?

mfg
TripleX
Posted By: fogman

Re: 16 Flags in einer Var/einem Skill - 07/10/05 16:58

lol

Wenn ich euch nicht hätte
Posted By: mk_1

Re: 16 Flags in einer Var/einem Skill - 07/10/05 22:14

Da ist dir wohl ein Fehler unterlaufen... 2^10-1 = 1023
oder gibt's bei dir keine Null? Soviel Logik muss sein.

Man kann natürlich auch den linken kleinen Finger für's Vorzeichen verwenden. Rechter Zeigefinger und linker kleiner Finger wäre dann -2... okay okay, ich hör auf.
Posted By: EX Citer

Re: 16 Flags in einer Var/einem Skill - 07/11/05 06:14

Ich hab das zwar jetzt nicht nachgerechnet, aber die 0 gibt es nicht. Denn 2 hoch 0 = 1. Wenn da auch nur eine 1 ist, dann ist es niemals 0. Sobald das Produkt ungerade ist steckt immer die 1 drin (also von 0001, 0011, 0111 ist das Produkt immer ungerade; 1110, 1100, 1010 Produkt ist immer gerade; (die 1 ganz rechts bzw 0))

Null ist = nichts ----> 0000000

Achja, falls du nicht weißt was das dualsystem ist... mist, dafür wäre ein Tabelle jetzt gut. Es baut auf wie eine Zahl, also von rechts nach links:
| usw | 4 | 3 | 2 | 1 | 0 | <-- wenn du 2 hoch das da setzt
| usw | 16 | 8 | 4 | 2 | 1 | <-- kommt das raus

Das geht auch mit 3,4,5,6,... das sind dann die Triple, Quadro, usw oder so ähnlich Zahlensysteme.

In diesen Zahlensystemen sind Lücken für unser standard 0-9Zahlensystem. Also zischen 4 und 8 "fehlen" ja einige Zahlen. Der Gag ist das man auf alle zwischen-Zahlen kommen kann indem man jede kleinere Zahl als 8 nur einmal Benutzt. Und mit dieser Methode gibt es "zufällig" auch nur eine Möglichkeit die jeweilige Zwischenzahl zu errechnen -> 5 = 1+4, 6 = 2+4, 7 = 1+2+4
Posted By: task1

Re: 16 Flags in einer Var/einem Skill - 07/11/05 10:05

cool danke!werd mal versuchen,dass ganze in mein kommunikation script zu integrieren!
Posted By: mk_1

Re: 16 Flags in einer Var/einem Skill - 07/11/05 10:37

Reine Logik.
Wenn du nur den Daumen hebst, hast du 1. Leuchtet ein, oder? Das wäre dann dein 2^0. Logischerweise kannst du bis zum kleinen Finger nur 2^9 rechnen. Die absolute Summe ergibt sich aus sum(x,2^x,0,9) = 2^0 + 2^1 + 2^2 + 2^3 + ... + 2^9 = 2^10-1 = 1023.

Null ist richtigerweise nichts, aber du preist es wie das Gegenstück zur 1 an. Es gibt ja auch kein Gegenstück zu 2^5. Entweder, man hat 32, oder man hat nichts an der Bit/Fingerposition.
Posted By: Wolfgang_Knecht

Re: 16 Flags in einer Var/einem Skill - 07/11/05 11:55

es geht ja nur darum, wie viele kombinationen es mit 10 bit gibt... und das sind nun mal 1024... ob jetzt von 0 bis 1023, von 1 bis 1024, von -511 bis +512 oder vielleicht mit nem offset von zB. 172 von 172-1195 ist doch vollkommen egal...
Posted By: mk_1

Re: 16 Flags in einer Var/einem Skill - 07/11/05 12:37


Aus einem Mathematikbuch (Stochastik) von 1970. Ein Vater will seinen Sohn rügen und möchte ihn zehn mal schlagen. Er hat jedes mal die Möglichkeit links oder rechts. Wieviele Möglichkeiten gibt es?

... deutsche Schulbücher, tss...
Posted By: ShoreVietam

Re: 16 Flags in einer Var/einem Skill - 04/24/06 16:44

Ha ich wusste doch, dass hier schonmal sowas war!

Mit den Bit-Operatoren ist das natuerlich edelst im Vergleich zu einer Auswertelogik!
© 2024 lite-C Forums