peeweeMedlem sedan juni 20043 inlägg Jag sitter och läser lite kod som hanterar en matris
members (["alpha":20,"beta":34,"charlie":28,"delta":44,"echo":82,])
vidare finns definitionerna
#define M_APPRENTICE 2
#define M_MAGE 4
#define M_MASTER 8
#define M_NECRO 16
#define M_CONJU 32
#define M_BANISH 64
I funktionen remove_master(mixed player) händer följande:
members[player] -= (members[player] & M_MASTER);
Vad gör den raden egentligen? Drar den bort M_MASTER (alltså 8) från player i matrisen (så "charlie" blir 20) eller tar den bort "charlie" helt och hållet?
Vidare, i funktionen add_master(mixed player,string school) så händer följande bl.a.
members[player] |= M_MASTER;
members[player] |= M_MAGE;
members[player] -= (members[player] & M_APPRENTICE);
Vad sjutton gör den? Jag gissar på att den sätter bitarna M_MASTER och M_MAGE till true och nollar M_APPRENTICE, men har jag rätt?
Jag vill inte gärna rota i koden och prova, eftersom den kompileras och körs i realtid av spelarna, och det finns inga andra admins påloggade just nu... söker bara ett snabbt svar... =)
GunnarDMedlem sedan juni 20014 290 inlägg Re: BIT-relaterade operatorer
peewee skrev:
members[player] -= (members[player] & M_MASTER);
Om man delar upp den lså bli det följande:
members[player] & M_MASTER : Detta blir M_MASTER om den bitten är satt annars 0.
Sedan utförs
members[player] = members[player] - "resultatet ovan".
Vilket medför att den noll ställer M_MASTER bitten.
Man skulle kunna skriva:
members[player] &= !M_MASTER;
peewee skrev:
members[player] |= M_MASTER;
members[player] |= M_MAGE;
members[player] -= (members[player] & M_APPRENTICE);
Vad sjutton gör den? Jag gissar på att den sätter bitarna M_MASTER och M_MAGE till true och nollar M_APPRENTICE, men har jag rätt?
Helt riktigt.
spangoMedlem sedan juni 20008 205 inlägg Re: Re: BIT-relaterade operatorer
GunnarD skrev:
Man skulle kunna skriva:
members[player] &= !M_MASTER;
Men man borde skriva members[player] &= ~M_MASTER; eftersom ! är en logisk och inte bitvis operator ;) Samma sak gäller för minustecknet. Använd de operatorer som är avsedda för bitoperationer. Vidare, om du använder C++ (och inte C) kan det vara värt att veta att vector<bool> använder en specialiserad implementation som gör att den arbetar med bitsets i stället för arrayer.
peeweeMedlem sedan juni 20043 inlägg Jag ställde frågan här eftersom språket jag använder (LPC) mest liknar C/C++. Jag vet inte särskilt mycket om C/C++ i sig... =)