kostenloser Webspace werbefrei: lima-city


& bzw. >> in Variablen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    theuntouchables

    theuntouchables hat kostenlosen Webspace.

    Hi!
    Hab da mal ne frage: Was haben & bzw. >> in folgende Variablen zu tun?

    $var1 = $var2 & 1;
    $var3 = ($var4 >> 1) & 63;


    Wäre für schnelle antworten sehr dankbat!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. ich würde sagen das gibt es garnicht, diese variablen. es könnte höchstens sein das eine webanwendung oder eine funktion diese variablen auswertet. eigentlich kenne ich mich ja gut mit dem zeugs aus aber das hab ich noch nie gesehen
  4. Autor dieses Themas

    theuntouchables

    theuntouchables hat kostenlosen Webspace.

    Joa ich ma php auch schon seit mehreren jahren, aber sowas habe ich noch nie gesehen. jetzt soll ich für n kunden eine seite mit joomla bauen und entdeck dass da in nem quelltext.
    Vllt hilfts was wenn ich sag dass es in einer Klasse und dort wiederum in einer funktion ist.
  5. Ja das werden dann Operatoren sein, die überladen worden sind.
    Zumindest gibts das in C++ eben bei Klassen^^

    Also wenns ein Operator ist heißt das, das diese \"Operatorfunktion\" beim verwenden eines solchen Operators aufgerufen wird.
    Das geht aber nur wenn glaub die linke Variable vor dem Operator zumindest eine Variable vom Typ der Klasse ist.

    Korrigiert mich wenn ich mich irre. ;)
  6. sieht irgendwie nach c/c++ aus

    ich tipp mal das das \"&\" $var2 und 1 binär verundet
    und das andere könnte ein binärer schiebe operator sein

    ps leider kann ich mich nicht mehr so genau daran erinnern wie das funktioniert

    Beitrag geändert: 5.6.2008 18:28:56 von aero23
  7. Ich habe zwar schon ein paar Jahre Erfahrung in sowohl php als auch C++. Doch das habe ich noch nie gesehen.

    $var1 <-- deutet eindeutig auf php hin
    =
    $var2
    & <-- könnte vielleicht etwas mit Zeigern zu tun haben. Ich denke jedoch eher, dass es etwas mit dem && (und) zu tun hat. Das heißt, dass $var1 z.B. 121 ist, wenn $var2 12 ist...
    1;

    ($var4 >> 1) <-- $var4 ist entweder > oder es ist etwas, was mein einlesen kann...

    also wie gesagt. Auch ich denke, dass es weder C++ noch Php ist sondern eine eigene Sprache (es gibt ja recht viele unbekannte...)

  8. Autor dieses Themas

    theuntouchables

    theuntouchables hat kostenlosen Webspace.

    Über die sprache brauchen wir nicht diskutieren, es ist PHP und in einem Script dass tausendfach eingesetzt wird.
    Wenn ihrs sehen wollt ladet euch die Ice Gallery für Joomla runter, geht dann in Zeile 385 und ab dort findet ihr über 10 zeilen sowas.

    Ich frag mich echt was das ist ey. Und Irgendwie interpretiert wird es auch nimma.

    PS: wenns hilft
    $this->_valid = $layout1 & 1;
    		if ($this->_valid) {
    			$this->_catCols = ($layout1 >> 1) & 63;
    			$this->_mediaCols = ($layout1 >> 7) & 63;
    			$this->_pageSize = ($layout1 >> 13) & 4095;
    			$this->_catImage = ($layout1 >> 25) & 7;
    			$this->_description = ($layout1 >> 28) & 3;
    			$this->_showOwner = $layout2 & 1;
    			$this->_showHeader = ($layout2 >> 1) & 1;
    			$this->_showFooter = ($layout2 >> 2) & 1;
    			$this->_catSort = ($layout2 >> 3) & 7;
    			$this->_mediaSort = ($layout2 >> 6) & 7;
    			$this->_embedMedia = ($layout2 >> 9) & 1;
    			$this->_mediaPos = ($layout2 >> 10) & 3;
    			$this->_mediaViewPos = ($layout2 >> 12) & 3;
    			$this->_thumbXY = ($layout2 >> 14) & 511;
    			$this->_scroller = ($layout2 >> 23) & 1;
    			$this->_mediaWidth = $layout3 & 32767;
    			$this->_mediaHeight = ($layout3 >> 15) & 32767;
    			$this->_catPageSize = $layout4 & 4095;
    		} else...
  9. aber wenn man 12 und 1 verundet kommt

    00000110
    &
    00000001
    =
    00000000

    zufällig 0 raus ^^
  10. Autor dieses Themas

    theuntouchables

    theuntouchables hat kostenlosen Webspace.

    $this->_pageSize = ($layout1 >> 13) & 4095;
    da kommt 18 raus falls es hilft.

    Echt, ich dachte ich kann PHP und dann kommt sowas.
  11. Das sind beides sog. Bitoperatoren.

    &: (z.b.: $c=$a & $b; ) setzt in c die Bits, die sowohl in a als auch in b gesetzt sind. sollte in etwa so aussehen: a=1011, b=0110 => c=0010

    >>: (z.b. $a>>$b) verschiebt a um b Bits nach rechts, also so: $c=$a>>2 mit $a=01100 => $c=00011.

    Funktionieren beide nur bei Integern.



    Beitrag geändert: 5.6.2008 20:05:36 von alphara
  12. Also, um das ganze mal aufzulösen:

    & ist ein Bit-Operator. D.h. er wirkt auf Bit-Ebene.
    aero23 hat das ja bereits sehr schön demonstriert, wie das funktioniert.
    Dann gibt es auch noch den |-Operator, der die Bits ver-oder-t.

    >> ist ein right-Shift und auch ein Bit-Operator.
    Beispiel:
    16 >> 2 ergibt 4, wenn man die binäre Repräsentation von 16 um 2 Stellen nach rechts verschiebt.
    Die 2 Stellen links kippen dabei einfach weg und vorne werden statt dessen Nullen angefügt.

    Also bildlich:
    10000 = 16
    Rechtsshift:
    01000 = 8
    Rechtsshift:
    00100 = 4

    Wie einige von euch jetzt vllt bemerkt haben, bedeutet ein Rechtsshift eine division durch 2, bei der abgerundet wird.

    Passend dazu gibt es auch einen Linksshift, wo dann die Bits nach links verschoben werden. Das ganze entspricht dann einer Multiplikation mit 2 (ohne Runden).

    Anmerkung: Der Prozessor unterscheidet Shifts und normale Multiplikationen.
    Man kann dem Prozessor also sagen, dass er zahl*2 rechnen soll oder einfach die zahl nach links shiften soll. Shifts sind immer schneller als Multiplikationen, aber sie funktionieren halt nur mit dem Faktor 2.


    Edit: Mist net schnell genug :P

    p.s Es gibt noch mehr Bit-Operatoren, wie z.B. der Rotations-Operator. Der ist aber nur verfügbar, wenn man in Assembler programmiert.

    Beitrag geändert: 5.6.2008 20:09:51 von bladehunter
  13. e********l

    Bit Operatoren in PHP sind sehr praktisch, wenn man ein Feld in der Datenbank für ein Item mit einem Status belegen will. So kann man ganz einfach mit einem einzigen Feld viele verschiedene Zustände abbilden. Beim TinyInt sind es zwar nur 9 Zustände, aber in den meisten Fällen reicht dies und sonst vergrößert man einfach das Feld oder nutzt Bitverschiebung ^^
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!