Kann man nicht-primitive Typen bitshiften?



  • Hallo,
    ich wollte fragen, ob es irgendwie geht, einen nicht-primitiven Typ zu bitshiften. Also zum Beispiel ein c - Array oder ein Struct? Das könnte sehr nützlich sein, wenn man zum Beispiel in einem Array alle Elemente nach links verschieben muss; dann könnte man ja einfach das Array um die Größe des beinhalteten Types bitshiften.

    Danke für eure Antworten


  • Mod

    "Bitshifts" sind nicht als physikalische Verschiebung von Bits im Speicher zu verstehen, sondern als mathematische Operationen. Entsprechend machen diese auch nur auf Zahlen zum Rechnen Sinn.

    Wozu denkst du, Elemente eines Arrays verschieben zu müssen? Bei primitiven Typen könnte man dies zwar prinzipiell durch memmove erreichen, aber normalerweise hat C++ ausreichend Abstraktionsmechanismen, dass echtes physikaliches Verschieben von Information unnötig sein sollte.



  • Nein, kann man nicht.

    Was man kann, ist für Klasse (class oder struct) oder Enums Operatoren zu überladen. Wobei einige Operatoren ausgenommen sind, aber für die meisten geht es.
    Bedingung ist dass mindestens ein Operand eine Klasse/Enum ist.

    Du kannst also durchaus einen Operator definieren den du dann mit meinObjekt << 23 oder meinObjekt <<= 23 aufrufen kannst. (Wobei nebenbei bemerkt zwei unterschiedliche Overloads nötig sind wenn beides gehen soll!)

    Das ganze führt aber nur dazu dass deine Operator-Funktion aufgerufen wird. Und die ist eine ganz normale Funktion, und tut nur genau das was du halt an Code reinschreibst. Es fürht also nicht dazu dass dabei auf magische Weise irgendwas geshiftet wird. Den Code der das erledigt musst du selbst schreiben.



  • @SeppJ sagte in Kann man nicht-primitive Typen bitshiften?:

    aber normalerweise hat C++ ausreichend Abstraktionsmechanismen, dass echtes physikaliches Verschieben von Information unnötig sein sollte.

    Naja oft muss man diese Abstraktionen dann doch irgendwie auswerten/materealisieren. Und oft ist es auch effizienter sich diese Abstraktionen gleich zu schenken, und direkt alles zu materealisieren.
    (Und mit "oft" meine ich natürlich nur "oft", nicht etwa "meistens".)


Anmelden zum Antworten