Interviewfrage: Erläuterung der Implementierungsidee der Umkehrung binärer Bits (allgemeine PHP-Version)

angryTom
Freigeben: 2023-04-07 16:08:01
nach vorne
4786 Leute haben es durchsucht

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.

Es gibt einige zu ergänzende Kenntnisse: (Empfohlenes Lernen: PHP-Video-Tutorial)

1 , Eine Zahl belegt ein Byte, d Vergessen Sie, dass Sie Folgendes nicht verstehen können~~~)

Sie können in PHP

echo bindec("00000001");   //bindec函数可以让你体会到 二进制和10进制之间的 骚转换<br/>
Nach dem Login kopieren

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

: 00000011 Das ist genau 3 (2 hoch 1. Potenz + 2 hoch 0. Potenz = 2+1=3)

Was ist mit der Dezimalzahl 3+1=4?


Antwort

: 00000100 Das ist 4 (2 hoch 2)

Was ist also mit der Dezimalzahl 4+1=5?


Antwort

: 00000101 Das ist 4 (2 hoch 2 + 2 hoch 0 = 4 + 1 = 5)


Beginnen Sie mit der Lösung des Problems

Angenommen, es gibt eine Binärzahl 00000101. Jetzt müssen wir sie auf den Kopf stellen und in 10100000 ändern. Wie wird gespielt?

Die Antworten finden sich überall im Internet, daher hier die Idee:


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 00000101

< ist 🎜>

2. 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 folgt

function 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/>
Nach dem Login kopieren

Aber seien Sie vorsichtig. Die Sache ist, dass die obige Funktion 1-Byte-Zahlen unterstützt (unterstützt nur 8 Ziffern)

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/>
Nach dem Login kopieren

echo rev(4);<br/>echo rev(43261596);<br/>
Nach dem Login kopieren

Test aufrufen

原始值二进制:00000100<br/>反转后值二进制:00100000<br/>32原始值二进制:00000010100101000001111010011100<br/>反转后值二进制:00111001011110000010100101000000<br/>964176192<br/>
Nach dem Login kopieren
Ergebnis

rrreee

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!

Verwandte Etiketten:
Quelle:www.hishenyi.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!