__ int64 aufspaltende Optimierung



  • Hallo ist jeder, traurig für die schlechte Sprache aber diese eine maschinelle Übersetzung. Ich denke, daß Sie die Bedeutung von ihr alle mindestens verstehen sollten.
    Läßt "a", "b" und "c" ist nicht unsigned __ int64 (20 Stellen Variablen), im Allgemeinen, was ich bin dieser tue; Ich nehme die ersten 10 Stellen von "a" und setze sie in "b" ein, während die letzte Stelle 10 in "c" einsteigen. Damit ein Beispiel wenn
    a = 11111111112222222222 dann
    b = 1111111111 und c = 2222222222
    unter, wie ich es im Augenblick tue, ist es funktioniert gerechte Geldstrafe aber ist hier die Frage: gibt es eine leistungsfähigere Weise, diese Tätigkeit durchzuführen, da es benötigt werden wird einem hellot der Zeit? Ich bin um das Netz gewesen und fand, daß Verschiebungen eine bessere Lösung sein können, aber ich weiß nicht genau, um sie zu benutzen.

    #define SPLIT 10000000000
    
    int main(void)
    {
       unsigned __int64 number, HiPart, LowPart;
    
       number = 11111111112222222222;
    
       HiPart = (number/SPLIT) % SPLIT;
       LowPart = number - (HiPart*SPLIT);
    
       return 0;
    }
    

    Danke



  • Raspoutine schrieb:

    Hallo ist jeder, traurig für die schlechte Sprache aber diese eine maschinelle Übersetzung. Ich denke, daß Sie die Bedeutung von ihr alle mindestens verstehen sollten.

    bitte schreibe auch deinen originaltext dazu, wenn du maschinelle übersetzung verwendest. so kann dann vielleicht mancher mit seinen sprachkenntnissen mehr verstehen.

    Ich bin um das Netz gewesen und fand, daß Verschiebungen eine bessere Lösung sein können, aber ich weiß nicht genau, um sie zu benutzen.

    verschieben geht so:

    unsigned __int64 number, HiPart, LowPart;
    
    number = 0xeeeeeeeeaaaaaaaa;
    
    HiPart = number>>32;
    LowPart = number & 0xffffffff;
    

    aber das funktioniert nut, wenn an einer grenze zwischen zwei bits aufgezeilt werden soll, also wenn SPLIT eine zweierpotenz ist. bei dir ist SPLIT eine zehnerpotenz. da mußt du das hellteure dividieren nehmen.

    #define SPLIT 10000000000
    
    int main(void)
    {
       unsigned __int64 number, HiPart, LowPart;
    
       number = 11111111112222222222;
    
       HiPart = number / SPLIT;
       LowPart = number % SPLIT;
    
       return 0;
    }
    

    diese version ist ein wenig einfacher als deine, sollte aber dast genauso teuer seon.



  • [maschinelle übersetzung]
    Dankt volkard, die Erklärung war sehr frei. Als Sie besagt, ist Ihr Code nicht sehr viel schneller aber Weise viel Reiniger. Der verschiebentrick kann usefull auch eines Tages sein.
    Dank wieder.

    [original text]
    Thanks volkard, the explanation was very clear. As you said, your code is not very much faster but way much clearer. The shifting trick may also be usefull someday.
    Thanks again.



  • Raspoutine schrieb:

    Dankt volkard

    Danke Volkard, deine Erklärung war wirklich sehr frei. 😃



  • ROFL! 👍 😃


Log in to reply