Problem mit bitweisem ODER
Achim Schrepfer
- php
Hallo zusammen,
ich bastle gerade an einem PHP-Skriptchen und habe ein kleines Problem mit der Ausführung einer bitweisen ODER-Operation. Hier mal das Skript (drumherum ist nur HTML):
33 <?php
34
35 $zahl1 = base_convert("01010101",2,10);
36 $zahl2 = base_convert("10101010",2,10);
37 $zahl3 = $zahl1 | $zahl2;
38
39 echo $zahl1."<br>\n";
40 echo $zahl2."<br>\n";
41 echo $zahl3."<br>\n";
42
43 echo base_convert($zahl3,10,2)."\n";
44
45 ?>
In den Zeilen 35 und 36 konvertiere ich die Binärzahlen in Dezimale. Die Ausgaben in Zeile 39 und 40 zeigen, dass dies richtig funktioniert (die dezimalen Werte sind 85 und 170).
Das merkwürdige ist, daß in $zahl3 nach Ausführung der Zeile 37 der Wert 970 steht und damit die Ausgabe von Zeile 43 eine Binärzahl "1111001010" ausgibt. Das ist ja eigentlich nicht möglich, oder?
Interessant ist vielleicht auch, daß die Ausgabe stimmt, wenn ich Zeile 37 durch folgendes ersetze:
37 $zahl3 = 85 | 170;
Dann funktioniert es und die Ausgabe von Zeile 43 ist "11111111".
Kann mir jemand - auch wenn das Posting etwas wirr ist ;-) - weiterhelfen?
Viele Grüsse,
Achim
Hoi,
33 <?php
34
35 $zahl1 = base_convert("01010101",2,10);
36 $zahl2 = base_convert("10101010",2,10);
37 $zahl3 = $zahl1 | $zahl2;
38
39 echo $zahl1."<br>\n";
40 echo $zahl2."<br>\n";
41 echo $zahl3."<br>\n";
42
43 echo base_convert($zahl3,10,2)."\n";
44
45 ?>
[...]
Das merkwürdige ist, daß in $zahl3 nach Ausführung der Zeile 37
der Wert 970 steht und damit die Ausgabe von Zeile 43 eine
Binärzahl "1111001010" ausgibt. Das ist ja eigentlich nicht
möglich, oder?
Doch, ist es. Denn hier sind die beiden Variablen Strings, und
keine Zahlen. Versuch mal folgendes:
$zahl3 = (int)$zahl1 | (int)$zahl2;
Gruesse,
CK
Hi,
Doch, ist es. Denn hier sind die beiden Variablen Strings, und
keine Zahlen. Versuch mal folgendes:
$zahl3 = (int)$zahl1 | (int)$zahl2;
ui! Das geht ja. Dankeschön. Da wär echt ich nicht draufgekommen. Ich dachte, daß PHP Typumwandlungen selbst vornimmt. Kannst Du mir vielleicht sagen, wo (int) Dokumentiert ist? Ich find`s einfach nicht.
Viele Grüsse,
Achim
Hoi,
ui! Das geht ja. Dankeschön. Da wär echt ich nicht draufgekommen.
Ich dachte, daß PHP Typumwandlungen selbst vornimmt.
Naja, haltautomatisch halt. Woher soll der PHP-Interpreter wissen,
dass du bei einer Bit-Verknuepfung ints haben willst? Strings
waeren genau so logisch.
Kannst Du mir vielleicht sagen, wo (int) Dokumentiert ist?
Ich find`s einfach nicht.
Sicher: http://www.php.net/manual/de/language.types.type-juggling.php#language.types.typecasting
Gruesse,
CK
Hoi,
Naja, haltautomatisch halt.
Sorry, sollte 'halbautomatisch' werden.
Gruesse,
CK
Hi,
Sicher: http://www.php.net/manual/de/language.types.type-juggling.php#language.types.typecasting
hab Dank! Mein Wochenende ist gerettet (weil ich jetzt nicht die ganze Zeit grübeln muss, wieso und warum Dinge so sind wie sie sind).
ein schönes solches
wünscht
Achim
hallöchen,
das ist eine cast-Anweisung aus c/c++ und java, eine funktion gibts in php aber auch, siehe hier:
http://www.selfphp3.de/funktionsreferenz/variablen_funktionen/is_int.php
Cu Rico
Hoi,
das ist eine cast-Anweisung aus c/c++ und java,
Eigentlich ist sie aus PHP.
eine funktion gibts in php aber auch, siehe hier:
http://www.selfphp3.de/funktionsreferenz/variablen_funktionen/is_int.php
Nein. is_int() macht keinen Typecast, sondern ueberprueft den Typ der
Variablen auf int. Die richtige Funktion dazu waere settype() (http://www.php.net/manual/de/function.settype.php)
gewesen.
Gruesse,
CK