Als ich zu einem Vorstellungsgespräch bei Huawei ging, war ich nicht gut vorbereitet; ich habe den Ablauf des Vorstellungsgesprächs nicht klar gestellt. Deshalb wurde ich gebeten, die Fragen gleich nach dem Bestehen am Computer zu beantworten. Das war wirklich etwas unvorbereitet. Der Autor ist ein Java-Web-Ingenieur, der sich gut mit Front-End auskennt, und die grundlegenden Programmierkenntnisse auf niedriger Ebene sind seit langem unbekannt. Die computerbasierte Testfrage ist auf diese Bitoperationsfrage gestoßen. Sie soll sehr einfach sein und das Prinzip ist mir sehr klar. Da ich jedoch seit vielen Jahren keine Bitoperationen mehr durchgeführt habe, habe ich noch nie Java-Bitoperationen durchgeführt. Das Ergebnis ist wirklich eine Schande...
Das Zeitlimit für den Computertest beträgt eine Stunde. Welche andere Skriptsprache kann ich verwenden? Ich schäme mich, die Fragen in Java zu beantworten Ich komme zurück. Ich habe eine einfache Version neu implementiert und sie heute gepostet.
Die Frage ist: Geben Sie zyklisch jede Gruppe von zwei Zahlen hexadezimal und n ein (0<=n<31). Wir müssen die n-te Ziffer von hexadezimal invertieren und dann ausgeben entsprechendes Ergebnis im Hexadezimalformat.
Ich werde nicht näher auf den Prozess eingehen, der mehr als zwei Stunden gedauert hat. Hier ist die Implementierung von js, bei der es sich um ein sehr einfaches Grundwissen über Bitoperationen handelt. Das Prinzip ist einfach: Verschieben Sie einfach 1 um n Bits nach links und verknüpfen Sie es dann mit der ursprünglichen Zahl:
function bitOper(hex, n){ var num = parseInt(hex); num ^= (1<<n); return num.toString(16); } console.log(bitOper(0x1234, 3)); //123c
Aufgrund der 32-Bit-Beschränkung des js-Ganzzahltyps unterstützt der obige Beispielcode nur den einfachen Fall von n<31 (Bit 31 ist das Vorzeichenbit).