hlmod.hu https://hlmod.hu/ |
|
read_argv, equal, equali , && & (1>>3) ?? https://hlmod.hu/viewtopic.php?f=10&t=28270 |
Oldal: 1 / 1 |
Szerző: | The Peace [ 2017.09.24. 18:33 ] |
Hozzászólás témája: | read_argv, equal, equali , && & (1>>3) ?? |
Sziasztok! Amit fent említettem a TÉMA NÉV-ben read_argv , equal , equali , && - & használata , (1>>3) , Nos ezekkel az a kérdésem hogy mire is funkcionálnak. mikor használunk && -t vagy csak simán &-t , definálva láttam ezt az (1>>3)-t az mit jelent, az equal és az equali miben másabb, a read_argv (arg) ezeket mire használják? Aki segít megy a köszönöm (lehet jó részletes leírás is!) |
Szerző: | fear_ezmegmi [ 2017.09.24. 18:51 ] |
Hozzászólás témája: | Re: read_argv, equal, equali , && & (1>>3) ?? |
equal, equali -> megnézi hogy két string egyenlő-e annyi különbség van a kettő között hogy az equali az nem veszi figyelembe a kicsi -és nagy betű közötti különbséget && <- ifben szokás használni és az 'ÉS'-t jelenti, magyarul mindkét oldalt igaznak kell lennie a feltételnek hogy tovább fusson Van egy hasznos táblázat hozzá: false && true -> false false && false - > false true && false -> false true && true -> true Pl: if(1 == 0) -> false if(1 == 1) -> true és belép a magba read_argv -> client_command paramétereit lehet beolvasni a 3>>1 és a & pedig a bittenkénti eltoláshoz tartozik, arról van Metalnak egy leírása valahol fórumon EDIT: viewtopic.php?f=55&t=3461 ez sokat fog segíteni |
Szerző: | fear_ezmegmi [ 2017.09.24. 20:57 ] |
Hozzászólás témája: | Re: read_argv, equal, equali , && & (1>>3) ?? |
Tudom hogy dupla poszt, de így átláthatóbb. Néhány példa a bit használatra: (https://forums.alliedmods.net/showthread.php?t=139916 alapján) ugye általában ha tárolni akarjuk mondjuk, hogy ki admin akkor legtöbbször tömböt használunk Kód: new bool:g_bAdmin[33]; Viszont ez 33*4 byte vagyis 132 byte memóriát használna fel, elég sok egy egyszerű kis booleanhoz nem? Itt jönnek képbe a bittenkénti operációk ugyanez a plugin így nézne ki: Kód: new g_bAdmin; Na mi is történik itt? Először is tudni érdemes hogy 4 byte az 32 bitet képes eltárolni (ugye 1 byte = 8 bit) A játékban a játékos IDk 1től 32ig vannak számozva ezért nem csinálhatunk szimplán 1 << 32t hiszen ha 32vel eltoljuk akkor túlcsordulunk, ezért egy kis trükköt használunk. az id & 31 alapvetőleg a játékosIDjét fogja visszaadni kivéve ha az 32 mert 32&31 = 0, tehát 1től 31ig a rendes számot fogja visszaadni 32nél pedig 0át így pedig tökéletesen elfogunk tudni tárolni mindent ami nekünk kell. Tehát az 1es értéket (true) eltoljuk mindig a játékos IDvel így maximális slot esetén is kihasználva minden helyet. Kód: public client_disconnect( id ) Itt pedig egyszerűen ahol ha 1 volt az IDnél akkor 0ra állítjuk majd pedig egy & bit operációval kivonjuk vagyis: 0000 0000 0000 0000 0000 0000 0100 0100 1 << (id & 31) id = 2 1111 1111 1111 1111 1111 1111 1111 1000 ~(1 << (id & 31)) 0000 0000 0000 0000 0000 0000 0100 0000 & ~(1 << (id & 31)) Az elején a 2es és a 6os IDnek volt adminja, így pedig már csak a 6osnak van. Kód: if ( g_bAdmin )ez igazzal tér vissza ha bármelyik helyen van 1es Másik példa: van egy változónk amiben fegyvereket tárolunk, jelen esetben hogy azok a fegyverek engedélyezettek-e. Kód: new g_weapons; eltároljuk az előbb megismert módszerrel őket, majd ha tiltani szeretnénk őket akkor egyszerűen le lehet kérdezni hogy a tiltottak között van-e a fegyver Kód: if ( g_Weapons & ( 1 << CSW_AWP ) ) |
Szerző: | The Peace [ 2017.09.27. 15:24 ] |
Hozzászólás témája: | Re: read_argv, equal, equali , && & (1>>3) ?? |
Ment a köszönöm, még értelmezgetem tényleg köszönöm! |
Oldal: 1 / 1 | Minden időpont UTC+02:00 időzóna szerinti |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |