Heim > Artikel > Backend-Entwicklung > Interviewfrage: Erläuterung der Implementierungsidee der Umkehrung binärer Bits (allgemeine PHP-Version)
Dies ist eine Interviewfrage, und einige Studenten äußerten, dass sie sie nicht verstehen könnten. Es ist nicht schwierig, Ihnen eine einfache Schulung zu geben, aber das Verfassen eines perfekten Vergleichs erfordert auch ein gewisses Maß an logischem Denkvermögen. Da die Richtung der Schüler PHP ist, werde ich sie gleichzeitig mit PHP erklären Gleichzeitig sagt es auch jedem, dass das Erlernen von PHP nicht funktioniert. Es wird gesagt, dass man PHP aufrufen kann, solange man zwei Echo-Sätze „Hallo Welt“ schreiben oder eine Schleife auf eine Webseite ausgeben kann.
1 , Eine Zahl belegt ein Byte, d Vergessen Sie, dass Sie Folgendes nicht verstehen können~~~)
Sie können in PHPecho bindec("00000001"); //bindec函数可以让你体会到 二进制和10进制之间的 骚转换<br/>
2 verwenden. (Dieser Tipp ist sehr wichtig ~~ , verstehe es sorgfältig)
Verwenden Sie Binär, um es mit Verschiebung zu machen
Antwort
: 00000010 Das ist genau 2 (2 hoch 1)Was ist mit der Dezimalzahl 2+1=3?
Antwort
Was ist mit der Dezimalzahl 3+1=4?
Antwort
Was ist also mit der Dezimalzahl 4+1=5?
Antwort
Beginnen Sie mit der Lösung des Problems
1. Zuerst muss es zwei Variablen geben,
1 ) Die temporäre Variable heißt $xxoo und der Anfangswert ist 0 (dezimal), was binär 00000000
ist. 2) Die ursprüngliche Wertvariable heißt $shit, was 000001012. 3 Schritte
1) Verschiebe $xxoo um eine Position nach links 2) Bestimmen Sie, ob die letzte Ziffer des Binärwerts von $shit ist 1. Wenn ja, geben Sie $ an. Der Dezimalwert von xxoo wird um 1 erhöht. Es ist sehr wichtig, ihn als binär zu betrachten und 00000000 in 00000001 zu ändern. Andernfalls ist der Anfangswert von $xxoo 00000000. Dies wird um p verschoben. . . Sie sind alle Null. Wie kann man also feststellen, ob das letzte Bit der Binärzahl 1 ist? Sie müssen anhand des Abfangens von Zeichenfolgen oder regulären Ausdrücken urteilen (das ist nicht unmöglich)
Antwort
: Führen Sie einfach eine logische UND-Verknüpfung mit dem ursprünglichen Wert und 1 (d. h. 00000001) durch (1&1 ist 1, 1&0 oder 0&1 sind immer 0)
3) Als nächstes verschieben Sie $shit um 1 Position nach rechts
1) Wenn es ursprünglich 00000101 war, wird es 00000010 nach dem Verschieben ( Das heißt, $xxoo und shit werden gleichzeitig verschoben, eines nach links und eines nach rechts. Wenn das letzte Bit shit 1 ist, können wir es beurteilen, also das letzte Bit von $xxoo ist ebenfalls auf 1 gesetzt, sodass sowohl xxoo als auch shit realisiert werden können. Die Synchronisierung wird umgekehrt) Wiederholen Sie den obigen Vorgang 8 Mal, um 10100000 zu erhalten
Der vollständige Code ist wie folgtfunction rev($n)<br/>{<br/> $xxoo = 0;<br/> for ($i = 0; $i < 8; $i++) {<br/> $xxoo = $xxoo << 1;<br/> if (($n & 1) == 1) {<br/> $xxoo++;<br/> }<br/> $n = $n >> 1;<br/> }<br/> return $xxoo;<br/>}<br/>echo decbin(rev(5));<br/>
Die Online-Interviewfragen sind 32-Bit-Zahlen, und der folgende Code unterstützt universelle Ziffern (Dieser Code ist online nicht verfügbar~~~). Lassen Sie uns darüber nachdenken und es verstehen, damit ich nicht zu viel erklären muss:
function rev($n)<br/>{<br/> $num=intval(strlen(decbin($n))/8); //整除 8<br/> if($num==0)<br/> $bitLen=8;//最小8位<br/> else<br/> {<br/> if((strlen(decbin($n)) % 8)>0)<br/> $bitLen=($num+1)*8;<br/> else<br/> $bitLen=$num*8;<br/> }<br/> echo “原始值二进制:”.str_pad(decbin($n),$bitLen,’0′,STR_PAD_LEFT).”<br/>”;<br/> $xxoo = 0;<br/> for ($i = 0; $i < $bitLen; $i++) {<br/> $xxoo = $xxoo << 1;<br/> if (($n & 1) == 1) {<br/> $xxoo++;<br/> }<br/> $n = $n >> 1;<br/> }<br/> echo “反转后值二进制:”.str_pad(decbin($xxoo),$bitLen,’0′,STR_PAD_LEFT).”<br/>”;<br/> return $xxoo;<br/>}<br/>
echo rev(4);<br/>echo rev(43261596);<br/>
原始值二进制:00000100<br/>反转后值二进制:00100000<br/>32原始值二进制:00000010100101000001111010011100<br/>反转后值二进制:00111001011110000010100101000000<br/>964176192<br/>
Das obige ist der detaillierte Inhalt vonInterviewfrage: Erläuterung der Implementierungsidee der Umkehrung binärer Bits (allgemeine PHP-Version). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!