[ascoders] Re: Bitweise verschieben


Im folgenden Beispiel wird -1 in eine 32-Bit-Ganzzahl umgewandelt und um ein
Bit nach rechts verschoben.
x = -1 >>> 1Das Ergebnis dieser Operation lautet wie folgt:

x = 2147483647 Warum in eine 32Bit Zahl ?

Hi Andre,


das lehnt sich an den Ganzzahlen-Datentyp 'int' an, welcher 32 bit beansprucht (s. z.B. diverse Java Bücher). Bitweise Operatoren lassen sich immer nur auf Ganzzahlen anwenden, andere Sprachen beschweren sich sogar wenn du anderes versucht.

Wenn du z.B. ein kleines Java-Programm schreibst:

____________________________________________________________________

public class BitteEinBit {

    public BitteEinBit() {
    }

public static void main(String[] args) {

        double a = -1;
        System.out.println(a >>> 1);

}

}
____________________________________________________________________

bekommst du hier eine Fehlermeldung vom Compiler:

"BitteEinBit.java [19:1] operator >>> cannot be applied to double,int"

Wenn du aber anstelle von

double a = -1;

schreibst:

int a = -1;

funktioniert es.

In ActionScript sind Zahlen 64bit Gleitpunktzahlen (double) und der Interpreter lässt viel mit sich machen ;o) D.h. die Gleitpunktzahlen werden kurzerhand vor der eigentlichen >>> Operation in einen 32bit-Integer umgewandelt und dann erst schlägt die bitweise Operation zu (gilt also für alle bit-schieber).

Die Umwandlung in einen 32bit Integer passiert übrigens auch mit dem aus Flash 4 bekannten int():

z1 = Math.round(111111111111111111); // 1.11111111111111e+17
z2 = int(111111111111111111); // -2074054208

ralf ...


------------------------------------------------------ Archiv : http://www.freelists.org/archives/ascoders/ Optionen : http://www.freelists.org/list/ascoders ------------------------------------------------------

Other related posts: