Yoeto: Bitweise Operatoren und Integer-Werte

<yoeto>

Wie wirken in JavaScript die bitweisen Operatoren auf Integer-Werte?

Oder, um eine Ebene tiefer zu beginnen: Wie sind Zahlenwerte in JS überhaupt bitweise codiert? Kann man bei Variablen mit ganzzahligen Inhalten davon ausgehen, dass sie "ganz normal" im Dualsystem dargestellt werden? Soweit ich weiß, gibt es in JS ja keine strenge Unterscheidung zwischen ganzzahligen und Fließkommavariablen.

Kann man die Operatoren dann auf ganzzahlige Variablen anwenden oder kommt da Bullshit raus?

</yoeto>

--
<signatur />
ie:% fl:( br:< va:| ls:~ fo:{ rl:? n4:( ss:{ de:] js:( ch:] mo:| zu:)
  1. hi,

    Wie wirken in JavaScript die bitweisen Operatoren auf Integer-Werte?

    Das könnte man echt mal ausprobieren, hm ...?

    Oder, um eine Ebene tiefer zu beginnen: Wie sind Zahlenwerte in JS überhaupt bitweise codiert? Kann man bei Variablen mit ganzzahligen Inhalten davon ausgehen, dass sie "ganz normal" im Dualsystem dargestellt werden?

    Sofern du noch keinen Quantencomputer in Benutzung hast, darfst du wohl davon ausgehen, dass dein Rechner Zahlen intern binär darstellt, ja.

    Kann man die Operatoren dann auf ganzzahlige Variablen anwenden oder kommt da Bullshit raus?

    javascript:alert(6 << 4)

    Ob's Bullshit ist oder nicht, bewerte doch bitte zunächst mal selbst.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. <yoeto>

      Das könnte man echt mal ausprobieren, hm ...?

      Ich bin da vorsichtig. Wenn es bei mir läuft, heißt das i.d.R. nicht unbedingt, dass es bei anderen ebenso läuft. Deswegen hatte ich gehofft, hier eine kompetente, allgemeingültige Antwort zu erhalten.

      Sofern du noch keinen Quantencomputer in Benutzung hast, darfst du wohl davon ausgehen, dass dein Rechner Zahlen intern binär darstellt, ja.

      (Ohne jetzt auf Details einzugehen, gestern habe ich tatsächlich an den Grundlagen der Theorie von Quantencomputern herumgerechnet. Ist ein interessantes Gebiet, aber meine Präferenzen liegen derzeit in anderen Bereichen.)

      Mit "ganz normal", vielleicht hätte ich das näher ausführen sollen, meinte ich eine Darstellung im Dualsystem, wobei die letzte Stelle den Wert 2^0, die zweite von rechts 2^1 usw. hat, so wie es eben in den meisten anderen Programmiersprachen für Integer-Variablen auch üblich ist. Wenn alle Zahlen gleichzeitig auch Gleitkommazahlen sein können, wäre ja auch eine Darstellung möglich, wo bspw. die Stelle mit dem Wert 2^0 nicht am Rand, sondern z.B. auf dem 16. von 32 Bits sitzt.

      javascript:alert(6 << 4)
      Ob's Bullshit ist oder nicht, bewerte doch bitte zunächst mal selbst.

      Das beantwortet meine Frage nicht, denn das Resultat der obigen Berechnung bleibt gleich, egal wie die Zahl dual dargestellt wird.

      </yoeto>

      --
      <signatur />
      ie:% fl:( br:< va:| ls:~ fo:{ rl:? n4:( ss:{ de:] js:( ch:] mo:| zu:)
      Currently listening: C. Saint-Saëns - Symphonie No. 3
      1. Hallo,

        javascript:alert(6 << 4)
        Ob's Bullshit ist oder nicht, bewerte doch bitte zunächst mal selbst.
        Das beantwortet meine Frage nicht, denn das Resultat der obigen Berechnung bleibt gleich, egal wie die Zahl dual dargestellt wird.

        JavaScript kennt nur einen numerischen Datentyp, nämlich Number. Variablen, denen ein numerischer Wert zugewiesen wird, haben danach automatisch diesen Typ. Es gibt also keinen Unterschied zwischen Integer- und Float-Variablen. Je nach Operation wird dann entschieden, welcher Wert (Integer oder Float) für die Operation verwendet wird. Bei Bitoperationen ist das der Ganzzahlanteil.

        Beispiel:

          
        var a = 4.9;  
        var b = 1.9;  
        alert(typeof(a) + ", " + typeof(b));  
          
        var c = (a << b);  
        alert(typeof(c)); //Number  
        alert(c); // (100 << 1) = 1000 = 8  
        alert(c.toString(2));  
          
        var d = (a | b);  
        alert(typeof(d)); //Number  
        alert(d); // (100 | 001) = 101 = 5  
        alert(d.toString(2));  
          
        //So kann man es natürlich auch machen, um ganz sicher zu gehen, dass man Dualzahlen verrechnet.  
        a = parseInt("0100", 2);  
        alert(typeof(a));  
        alert(a);  
        
        

        viele Grüße

        Axel