Code Stück



  • wie wird eigentlich sowas vom Compiler gehandelt.

    if(3.1234567888888 == 3.1234567888889)
    

    { // hier wird true ausgegeben}

    Die Zahlen werden die standardmäßig in einen double or float gespeichert ?
    Es gibt ja auch diese explizite Schreibweise mit:
    3.1234567888888f oder 3.1234567888888d obwohl ich jetzt nicht weiss ob es "d" überhaupt gibt.



  • Es meldet sich ja keiner mehr 😞

    Mal noch so nee frage.

    Wieso funktioniert der Shift Operator nicht bei double Zahlen sondern nur bei int ?

    Würde doch bei double auch Sinn machen ??



  • Peter_Mueller schrieb:

    Würde doch bei double auch Sinn machen ??

    Echt? Was ist denn

    6.022140857e23>>5
    

    ?



  • Lol bei meinem Beispiel klappt das 🙂

    Zahl: 1011,101=11,625
    Anwendung Shift Operator: >>1 (Verschiebung nach rechts)
    Ergibt diese Zahl: 101,1101 = 5, 8125

    wobei 5,8125 * 2 = 11,625 ist . Folglich hat der Shift Operator funktioniert 🙂



  • volkard schrieb:

    Echt? Was ist denn

    6.022140857e23>>5
    

    ?

    Sollte doch bei deinem Beispiel auch klappen ??!!

    Wird halt dann zu 0.00006022140857e23



  • Also rein logisch macht es keinen Sinn, wie kann man ein Bit beispielsweise um 1,5 Stellen nach Rechts verschieben?



  • häh. Es geht doch nur darum Bits zu verschieben. Klar müsste man beim double noch etwas mehr durchführen wenn man z.B. die nullen hinter dem Komma entfernen möchte und dann noch den Exponent ändern, aber grundsätzlich funktioniert das !



  • Ah, ich dachte eben du meinst sowas:

    a >> 1.5
    

    Sorry.



  • volkard schrieb:

    Echt? Was ist denn

    6.022140857e23>>5
    

    ?

    Kann mal einer dazu was sagen. Wieso sollte das keinen Sinn ergeben ?

    0.000060221408e23 ??? Stimmt das nicht ??


  • Mod

    @Peter_Mueller: Die Bitshift-Operatoren sind genau das, was der Name aussagt: Operatoren, um Bits zu shiften. Bei Ganzzahlen kannst Du damit durch 2^n teilen oder mit 2^n multiplizieren, weil die interne Darstellung der Ganzzahlen dazu fuehrt, dass das in diesem Fall aequivalent ist. Bei Fliesskommazahlen gibt es diese Aequivalenz aber nicht. Recherchier mal, wie Fliesskommazahlen intern repraesentiert werden und dann ueberleg Dir, was Du Dir in diesem Fall von einem Bitshift-Operator versprichst.

    Generell kann man das Multiplizieren/Dividieren mit 2^n mittels Bitshoftoperatoren auch schon als eine Art von Missbrauch des Operators ansehen. Man macht das, weil man meint, besonders schlau zu sein, insbesondere schlauer als der Optimierer des Compilers. Eigentlich sollte man den Operator aber eher nur dann nutzen, wenn es einem nicht um den Wert der Ganzzahl im Gesamten geht, sondern um die einzelnen Bits, die diese Zahl ausmachen. Diese Operatoren sind nuetzlich, wenn man in einer Ganzzahl eigentlich eine Folge von boolschen Variablen speichern moechte und diese manipulieren moechte.


Anmelden zum Antworten