Wenn wir das Problem in Schritte unterteilen, wird es einfach zu folgen. Ich werde zuerst den bitweisen Teil erklären, damit jeder, der diese Frage erreicht, den Punkt bekommt. Am Ende sehen Sie eine Erwähnung Ihres Problems.
Start:
$v = 4;
Zuerst prüfen wir, wie viele Bits für diesen Wert benötigt.
echo decbin($v); // 3 bits (100)
Dann verließen wir es durch zwei verschieben:
echo $v << 2; // the value is now 16. Why?
denn wenn wir überprüfen die Bits:
echo decbin($v << 2); // 5 bits (10000) -> the previous 3 bits + 2 shifted
// /\ check that there are more 2 bits now
Aber wir bekommen 32
als Ergebnis , Warum das? Nun, weil in diesem Fall +
zuerst kommt. Es wertet zunächst die Summe (2 + 1) aus und verschiebt erst dann. Ihr Code ist der gleiche wie 4 << (2 + 1)
.
Wenn wir die Schritte genau wie vorher überprüfen, aber wissend wird es zuerst summieren, wird es tatsächlich um 3 scheißen, so dass der letzte Wert 6 Bits stattdessen haben. Wenn wir den um 3 (100000) verschobenen Wert umrechnen, erhalten wir 32
.
Siehe: http://stackoverflow.com/q/3737139/3933332 und http://php.net/manual/en/language.operators.precedence.php – Rizier123
Das ist das gleiche wie '(4 << (2 + 1)) ': [https://eval.in/614829](https://eval.in/614829). – FirstOne
Bitte posten Sie die Antwort nicht als Bearbeitung in der Frage;). Ich habe eine Antwort für Sie gepostet ^^ (Ich werde diesen Kommentar bald entfernen) – FirstOne