Umwandlung durch bitweise Operatoren

Aktualisiert: November 2007

Die bitweisen Operatoren in dieser Version von JScript sind mit den bitweisen Operatoren früherer Versionen von JScript voll kompatibel. Darüber hinaus können die JScript-Operatoren auch für die neuen numerischen Datentypen verwendet werden. Das Verhalten der bitweisen Operatoren hängt von der binären Darstellung der Daten ab. Es ist daher wichtig zu verstehen, wie die Operatoren die Datentypen umwandeln.

Drei Typen von Argumenten können an bitweise Operatoren übergeben werden: früh gebundene Variablen, spät gebundene Variablen und Literaldaten. Früh gebundene Variablen sind Variablen, die mit einer expliziten Typanmerkung definiert sind. Spät gebundene Variablen sind Variablen vom Typ Object, die numerische Daten enthalten.

Bitweiser AND (&)-, OR (|)- und XOR (^)-Operator

Wenn entweder der Operand spät gebunden ist oder beide Operanden Literale sind, werden beide Operanden in int (System.Int32) umgewandelt, die Operation wird durchgeführt, und der Rückgabewert ist ein int.

Wenn beide Operanden früh gebunden sind, oder wenn ein Operand ein Literal und der andere früh gebunden ist, werden mehr Schritte ausgeführt. Beide Operanden werden in einen Typ umgewandelt, der durch folgende Bedingungen bestimmt wird:

  • Wen keiner der Operanden eine ganze Zahl ist, werden beide Operanden in int umgewandelt.

  • Wenn nur ein Operand eine ganze Zahl ist, wird der Operand, der keine ganze Zahl ist, entweder in eine ganze Zahl oder in einen int-Wert umgewandelt, je nachdem, welcher Typ länger ist.

  • Wenn ein Operand länger ist, hat der Typ, in den der Operand umgewandelt wird, die gleiche Länge wie der längere Operand.

  • Wenn einer der beiden Operanden kein Vorzeichen hat, ist der Typ, in den der Operand umgewandelt wird, ohne Vorzeichen. Andernfalls hat der umgewandelte Typ ein Vorzeichen.

Anschließenhd werden die Operanden in den entsprechenden Typ umgewandelt, die bitweise Operation wird durchgeführt, und das Ergebnis wird zurückgegeben. Der Datentyp des Ergebnisses entspricht dem Datentyp der umgewandelten Operanden.

Wenn Sie ein ganzzahliges Literal mit einem bitweisen Operatore und einer früh gebundenen Variablen verwenden, wird das Literal entweder als int, long, ulong oder double interpretiert, je nachdem, welcher der kleinste Datentyp ist, der die Zahl darstellen kann. Literale decimal-Werte werden in double-Werte umgewandelt. Der Datentyp des Literals kann weiteren Umwandlungen gemäß den oben beschriebenen Regeln unterzogen werden.

Bitweiser NOT-Operator (~)

Wenn der Operand spät gebunden, ein Gleitkommawert oder ein Literal ist, wird er in int (System.Int32) umgewandelt, die NOT-Operation wird ausgeführt, und der Rückgabewert ist ein int.

Ist der Operand eine früh gebundene ganze Zahl, wird die NOT-Operation durchgeführt, und der Rückgabetyp ist der gleiche wie der Typ des Operanden.

Bitweiser Leftshift (<<)‑ und Rightshift (>>)-Operator

Wenn der linke Operand spät gebunden, ein Gleitkommawert oder ein Literal ist, wird er in int (System.Int32) umgewandelt. Andernfalls ist der linke Operand eine früh gebundene ganze Zahl, und es wird keine Umwandlung durchgeführt. Der rechte Operand wird immer in eine ganze Zahl umgewandelt. Die Schiebeoperation wird dann mit den umgewandelten Werten durchgeführt, und das zurückgegebene Ergebnis hat den gleichen Datentyp wie der linke Operand (sofern dieser früh gebunden ist) oder wie der Typ int.

Vorzeichenloser Rightshiftoperator (>>>)

Wenn der linke Operand spät gebunden, ein Gleitkommawert oder ein Literal ist, wird er in uint (System.UInt32) umgewandelt. Andernfalls ist der linke Operand eine früh gebundene ganze Zahl und wird in einen vorzeichenlosen Datentyp derselben Größe umgewandelt. Beispielsweise würde ein int in einen uint-Wert umgewandelt werden. Der rechte Operand wird immer in eine ganze Zahl umgewandelt. Die Schiebeoperation wird dann mit den umgewandelten Werten durchgeführt, und das zurückgegebene Ergebnis hat den gleichen Datentyp wie der umgewandelte linke Operand (sofern dieser früh gebunden ist) oder wie der Typ uint.

Das Ergebnis der vorzeichenlosen Rightshiftoperation ist stets so klein, dass es ohne Überlauf in der Version des Rückgabetyps mit Vorzeichen gespeichert werden kann.

Siehe auch

Konzepte

Operatorrangfolge

Typkonvertierung

Umwandlung in JScript

Numerische Daten

Weitere Ressourcen

JScript-Operatoren