Wo gehts "nach links" auf Hardware-Ebene?



  • Hallo Forum,

    liefert der folgende Code für b auf jeder Hardware das gleiche Ergebnis?

    unsigned char a;  // garantiert 8-bit breit
     unsigned char b;
     a = 2;
     b = a << 1;
    


  • Ja, solange a unsigned ist, man CHAR_BIT für 8 fix hält und man nie mehr als CHAR_BIT-1 shiftet.



  • Dann verschiebt also der "<<"-Operator nichts nach links, rechts oder sonstwo hin, sondern immer in Richtung MSB?



  • Ich formuliere es mal so: Hä?



  • Tim schrieb:

    Ich formuliere es mal so: Hä?

    tu nicht so unwissend 😃

    zur frage:
    ein shift auf einen 8 bit breiten integer ist endianess-unabhängig, logisch oder? 🙂

    edit: falls du mit MSB allerdings das most significant bit meinst, dann ist dies auch irrelevant. der C compiler erzeugt entsprechend maschinencode, der zum gleichen ergebnis führt. ob auf assemblerebene unterschiede bei den jeweiligen shifts bestehen kann ich dir jetzt gar nicht mal sagen, denn ich habe noch nie einen powerpc besessen 😃



  • Abhängig von der Einbaurichtung der CPU könnte das auch von oben nach unten oder von vorn nach hinten schieben. Wenn man vorwiegend Programme betreibt, die hauptsächlich in nur eine Richtung schieben, kann kann man hier durch Ausnutzen der Gravitation einiges an Energie sparen!



  • Soweit ich mich erinnern kann, macht diese OP doch eh der Prozessor, der sollte es wissen ...



  • Bashar schrieb:

    Abhängig von der Einbaurichtung der CPU könnte das auch von oben nach unten oder von vorn nach hinten schieben. Wenn man vorwiegend Programme betreibt, die hauptsächlich in nur eine Richtung schieben, kann kann man hier durch Ausnutzen der Gravitation einiges an Energie sparen!

    das erfordert aber eine spezielle programmierung, da man dafür die lagebits der cpu auslesen muss. man bedenke nur, was passiert, wenn man bspw für einen normalen rechner optimiert hat und dann jemand das programm auf einem laptop also um 90° gekippt ausführt. das führt zu ernormen energie verlusten. daher immer dynamisch optimieren, nachdem man die korrekte lage der cpu ermittelt hat.

    spaß bei seite: das endian interessiert nur bei der physikalische anordnung der bytes bei mehr als einem byte, aber auch hier garantiert einem c, dass der operator << immer nach "links" schiebt, wenn man mit die bits in dem byte/mehrbytesystem analog zu einem normalen zahlensystem aufschreibt. wenn ich jetzt nicht völlig daneben liege, ist das auch bei allen prozessoren so definiert, dass die shifting richtungen so definiert sind. anders wäre auch sehr komisch. aber vllt hat ja jemand eine prozessor der von links nach rechs schreibt. 😉


Anmelden zum Antworten