<<

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Also es gibt ja diese Operatoren ">>" und "<<" nicht nur in pawn, was genau bringen die?
    Habe mal was gehört von bit verschiebung oder so :S

  • Hat auch etwas mit Bitverschiebung / Bitflags zu tun.
    Hab dazu schon mal was gepostet,ist aber wohl untergegangen im Thread.



    Generell ist das ganze sehr nützlich wie Ich finde.Damit kann man sich einiges an Arbeit ersparen, natürlich nur wenn man auch wirklich weiss, wie es funktioniert.


    new
    str_num = 3;
    if(str_num << 2 == 24) return str_num = (~(3));
    3 << 2 ist aber 12 :-O!
    -------
    8 4 2 1
    - - - - -
    0 0 1 1 = 3
    1 1 0 0 = 12

  • Ist schwer zu erklären, glaube auch nicht,dass Ich 100% darüber bescheid weiss.
    Du solltest jedenfalls schon ein wenig über das Dualsystemwissen, um die ganze Bitverschiebung / setzung usw zu verstehen.



    Wenn ich Zeit finde post Ich vllt eine kurze Anleitung.Eventuell könnte aber irgendjemand anderes dir einen Crash-Kurs darin geben ;).

  • Danke...
    Das mit dem Dualsystem versteh ich schon, aber noch nicht so ganz, was nun "verschoben" wird ...


  • Da du ja weisst wie das Dualsystem funktioniert,brauch ich wohl 8 - 4 - 2 - 1 nicht erklären.Würde eigentlich noch viel weiter gehen bis es 32 Stellen sind.


    0011 im Dualsystem ist die 3.Wenn mann jetzt die 0011 um 2 nach links verschiebt ( << 2 ) erhält man 1100 ( 12 ).
    Hätte man jetzt um 1 verschoben ( << 1 ) wäre es demnach 0110 ( 6 ).
    Generell werden einfach die 0 und 1 im Dualsystem gesehen verschoben.
    Klick mich
    Das Bild zeigt die Bitverschiebung nach links um 1 ( << 1 ).

  • aaah ok so langsam fang ich an es zu blicken danke :)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • aaah ok so langsam fang ich an es zu blicken danke :)


    Ist ja gut.Dann wird es auch nicht ganz so schwer sein,das Script oben halbwegs zu verstehen.


    Zitat

    PLAYER_FLAG_GOD = 1,
    PLAYER_FLAG_VIP, // 2
    PLAYER_FLAG_MUTE, // 4
    PLAYER_FLAG_INVISIBLE, // 8
    PLAYER_FLAG_SPECTATED, // 16


    16 8 4 2 1 - Wenn du jetzt weisst welche Bit für was steht,kannst du so auch daraus auf einiges schließen.


    1 0 1 0 0 - 16 und 4 sind gesetz,würde also heißen PLAYER_FLAG_SPECTATED und PLAYER_FLAG_MUTE
    1 1 1 0 1 - 16, 8,4 und 1 sind gestzt.Folgt also das _:GOD,MUTE,INVISIBLE und SPECTATED


    Abfragen dazu macht man dann mit Bitwise-And ( Nennt man glaub ich so )
    #define IsPlayerFlag(%0,%1) \
    (PlayerInfo[%0][ibFlag] & (%1) )

    Falls du mehr wissen willst,sag bescheid.Kann ja nicht schaden wenn mehr Leute damit anfangen auch so zu scripten,da es in meinen Augen mehr Vorteile hat.
    Bspw auch Teams.
    Man kann dann sagen der Spieler ist in TEAM_XY und TEAM_ADMIN ( Godfather eventuell ) ohne einen riesen Umstände.

  • da oben scheiter ich schon beim
    enum (<<= 1)
    ich dachte man muss da nen namen hinschreiben... xD

  • Hier bei brauch oder kann man das auch überhaupt nicht.
    Das (<<= 1) bedeutet,dass für jeden folgenden Eintrag der Wert um 1 Bitweise verschoben wird.


    Zitat

    PLAYER_FLAG_GOD = 1,
    PLAYER_FLAG_VIP, // 2
    PLAYER_FLAG_MUTE, // 4


    Weil PLAYER_FLAG_GOD 1 ist,wird der nächste um 1 nach Links verschoben.
    000000001 ( << 1 ) [ Ist ja der Wert 1 ]
    --> daraus folgt :
    000000010


    Geht dann immer so weiter.


    Das ganze findet man aber auch mehr oder weniger im SA:MP Forum,Klick


    Du hättest es aber auch anstatt mit einem Enum so machen können
    #define PLAYER_FLAG_GOD ( 1 << 0 )
    #define PLAYER_FLAG_VIP ( 1 << 1 )
    #define PLAYER_FLAG_MUTE ( 1 << 2 )
    ...
    Oh man,dass verwirrt dich jetzt bestimmt xD

  • doch danke ich versteh wie das funktioniert...
    PLAYER_FLAG_GOD = 1, //ist 1
    PLAYER_FLAG_VIP, // ist 2 weil es um 1 ge<< wird
    PLAYER_FLAG_MUTE, // ist 4 weil es um 2 ge<< wird
    #define PLAYER_FLAG_GOD ( 1 << 0 ) //ist 1 (<<0 bringt nix)
    #define PLAYER_FLAG_VIP ( 1 << 1 ) // ist 2 weil es um 1 ge<< wird
    #define PLAYER_FLAG_MUTE ( 1 << 2 ) // ist 4 weil es um 2 ge<< wirdoder?

  • doch danke ich versteh wie das funktioniert...
    PLAYER_FLAG_GOD = 1, //ist 1
    PLAYER_FLAG_VIP, // ist 2 weil es um 1 ge<< wird
    PLAYER_FLAG_MUTE, // ist 4 weil es um 2 ge<< wird


    Aber auch nur bei
    enum (<<= 1)
    Bei
    enum (<<= 2)
    wäre es Anders.Da wäre es 1 , 4 ,16 ,da man ja jeweil um 2 Verschiebt.
    0000001 - 1
    0000100 - 4
    0010000 - 16
    ;)