& bzw. >> in Variablen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
assembler
beleg
bit
code
diskutieren
division
einlesen
feld
funktion
funktionieren
jahr
multiplikation
operator
prozessor
sagen
stellen
tun
zahl
zeiger
zeile
-
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! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
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. ;) -
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 -
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...)
-
Ü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...
-
aber wenn man 12 und 1 verundet kommt
00000110
&
00000001
=
00000000
zufällig 0 raus ^^ -
da kommt 18 raus falls es hilft.$this->_pageSize = ($layout1 >> 13) & 4095;
Echt, ich dachte ich kann PHP und dann kommt sowas. -
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 -
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 -
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 ^^
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage