Multiplexing Funktionalitaet



  • Hallo,

    ich möchte eine folgende Aufgabe lösen.
    Ich habe drei Werte:

    char value1, value2, decider;
    

    Abhängig von 'decider' wird entschieden, entsprechende Bit aus value1 oder aus value2 zu nehmen.

    Bisher habe ich so gemacht:

    result = (value1 & (~decider)) | (value2 & decider);
    

    Gibt's vielleicht einfachere Lösungen?
    Geht es auch mit dem '?'-Operator?

    Gruss



  • result = decider ? value1 : value2 ;
    


  • senmeis schrieb:

    Abhängig von 'decider' wird entschieden, entsprechende Bit aus value1 oder aus value2 zu nehmen.

    das hängt doch auch von value1 und value2 ab 😉
    deine entscheidungskriterien sind mir nicht ersichtlich.

    BorisDieKlinge schrieb:

    result = decider ? value1 : value2 ;
    

    das ist nicht äquivalent



  • Hallo,

    Die Entscheidung soll bitweise gemacht werden.
    Z.B.

    value1 = 00000000b; value2 = 11111111b; decider = 11110000b;
    

    dann result = 00001111b.

    Gruss



  • einfach nur invertieren ?
    result = ~decider

    ?



  • senmeis schrieb:

    [cpp]result = (value1 & (~decider)) | (value2 & decider);
    

    Gibt's vielleicht einfachere Lösungen?
    Geht es auch mit dem '?'-Operator?

    Gruss

    also ich glaube nicht, dass es noch einfacher geht (zumal es doch so schon gut aussieht) - der '?' operator bringt dir hier aber rein gar nix, denn der kann nur logische bedingungen überprüfen (und nicht - abhängig von dem bit in decider - mal das bit von value1, mal das von value2 zu einem ergebnis zusammenfügen). und wenn du mal die arbeitsschritte prüfst: für alle bits die in decider gesetzt sind, die bits aus value2 verwenden (dafür brauchst du schonmal decider und value2), für alle die in decider nicht gesetzt sind die bits aus value1 verwenden (hier braucht man ~decider und value1), danach noch beide werte zusammenfügen, das macht ja so auch dein code und ich glaube einfacher gehts auch nicht.



  • Danke.

    Senmeis


Anmelden zum Antworten