Bitoperator



  • Hallo,

    ich suche nach einer möglichkeit bei einer zahl zu prüfen, ob sie auf eine bestimmte ziffer endet, bekomme es aber nicht hin.

    gibt es hierfür eine einfache möglichkeit mit bitoperatoren??

    mfg

    gucky


  • Mod

    Rechne doch einfach modulo zu deiner Basis (also normalerweise 10).



  • ich habe gehofft ich komme ums modulo rechnen


  • Mod

    Natürlich kann man modulo irgendwie durch Bitoperationen ausdrücken (bei Zweierpotenzen sogar ganz einfach). Aber das klingt alles sehr geheimnisvoll was du willst, ohne dass du verrätst, warum. Dann kann man dir auch nicht vernünftig helfen.



  • es ist nicht geheimnisvolles

    ich hab eine zahl x (z. B. x = 45), wenn diese auf 3 endet soll was gemacht werden.
    wenn die zahl auf 5 endet, soll etwas anderes geamcht werden

    wenn die zahl auf 9 endet, soll noch etwas anderes geamcht werden

    ich hoffe das ist verständlicher.


  • Mod

    Und somit sind wir wieder bei der Ursprungsfrage: Warum nicht modulo?



  • Wenn du ein Problem mit dem Modulo hast, wie wäre es denn damit :D:

    stringstream s;
    s << zahl;
    switch(s.str().back())
    {
      case '0':
        ...
        break;
      ...
    }
    

    Im Ernst: Ganzzahldivision und Modulo dürfte schon effektiv genug sein, um das nicht nachbauen zu müssen.


  • Mod

    Andere Betrachtungsweise: Wenn du eine Programmstelle hast, an der eine Division performancekritisch ist, dann machst du Hardcorenumerik*. Und da klingt eine Verzweigung** aufgrund der letzten Stelle im Zehnersystem doch irgendwie komisch. Ich wette, die 10 ist gar nicht wichtig. Da kannst du dir bestimmt auch eine Zweierpotenzbasis wählen. Und dann kann man wirklich was mit Bits tricksen. Wie, das findest du dann schon alleine im Netz.

    Aber ich glaube wir haben es mit einem Extremmikrooptimierer mit völlig falschen Prioritäten zu tun.

    *: Ja, das glaube ich selber nicht. Ich halte dich für jemanden der eine Stelle mikrooptimieren möchte, die in einem Programm alle paar Minuten aufgerufen wird und überhaupt gar nichts mit der Performance des Programms auf sich aht.

    **: Jeder der bedingte Verzweigungen in seinem performancekritischen Loop hat, dabei aber Ganzzahldivisionen scheut, hat ohnehin einen mittelschweren Knall.



  • Die "Division" durch 10 wird vom Compiler eh in eine Multiplikation (6-8 Takte) und anschließendes shift und and umgewandelt. Wenn es nur um die letzte Stelle geht, wirst Du das nicht schlagen können.

    edit: Ich lese gerade, daß die Prozessorbauer schon auf 3-4 runter sind.


Anmelden zum Antworten