linksverschiebung



  • was passiert dann, wenn auchnoch der shiftoperator (<<) implementiert ist?
    wie kann ich explizit angeben, dass ich eine linksverschiebung machen will?



  • Was ist denn eine Linksverschiebung?



  • ich schiebe alle bits um eine stelle nach vorne;

    aus 1 (0001) wird 2 (0010)
    aus 8 (1000) wird 0 (0000)


  • Mod

    Das wird immer verwirrender. Was meinst du denn, was der Linksschiebeoperator << macht?



  • frank1234 schrieb:

    was passiert dann, wenn auchnoch der shiftoperator (<<) implementiert ist?
    wie kann ich explizit angeben, dass ich eine linksverschiebung machen will?

    Mein Wörterbuch sagt: left shift = Linksverschiebung
    Womit verwechselst du << gerade?

    Möglicherweise ist hier der Operator für ostream gemeint. Für eigene Klassen kann man den left shift natürlich zusätzlich zum Ausgabeoperator definieren. Man muss dafür nur wissen, wie man Operatoren überlädt.



  • Möglicherweise ist hier der Operator für ostream gemeint.

    ja.
    im index meines buches steht halt einmal <<(Operator),womit die linksverschiebung gemeint ist und einmal <<(Shift-operator), womit der operator für streams gemeint ist.

    ich habe eine klasse geschrieben und es gibt einen fehler, wenn ich versuche zu verschieben.

    using namespace std;
    
    class A{
        public:
        A();
        virtual ~A();
        string s;
    };
    
    A::A(){s="asdf";};
    A::~A(){};
    
    int main(){
        A a;
        a=a<<2;
        return 0;
    }
    

    der fehler:

    error: no match for 'operator<<' in 'a << 2'|
    

    wieso gibt es den fehler wenn die verschiebung standartmäßig implementiert ist?



  • Für eigene Klassen ist der Shift-Operator natürlich nicht standardmäßig impelementiert (wir dachten, du meinst die Builtin-Typen). Woher soll der Compiler auch wissen, was du mit a << 2 meinen könntest? Reine Bitverschiebung bei Klassenvariablen ist jedenfalls keine gute Idee.



  • ah ok.....
    gibt es einen weg wie ich eine byte oder bitrepräsentation der variable bekommen kann?


  • Mod

    frank1234 schrieb:

    ah ok.....
    gibt es einen weg wie ich eine byte oder bitrepräsentation der variable bekommen kann?

    Klar gibt es die. Die Adresse der Variable bekommst du mit &. Was du damit machen willst, habe ich aber keine Ahnung.



  • frank1234 schrieb:

    ah ok.....
    gibt es einen weg wie ich eine byte oder bitrepräsentation der variable bekommen kann?

    Gibt es. Mich würde allerdings der Fall stark interessieren, wo du meinst, das zu brauchen.

    Nehmen wir z.B. einen string. Die string-Klasse sieht sehr vereinfacht so aus:

    class string
    {
        char* data;
    public:
        // viele tolle Funktionen
    };
    

    Sie verwaltet dabei selbsständig den data -Zeiger (fordert Speicher an, gibt ihn frei). Wenn jetzt ein shiften möglich wäre, würde der Zeiger plötzlich einen gänzlich anderen Wert haben und praktisch alle Methoden von string (inklusive Destruktor) lösen plötzlich eine Zugriffsverletzung aus.

    Wozu brauchst du das also?


Anmelden zum Antworten