共用方式為


由位元運算子強制型轉

這一版 JScript 的位元運算子與上一版 JScript 的位元運算子完全相容。 此外,JScript 運算子也可用於新的數值資料型別。 位元運算子的行為是根據資料的二進位表示而定,因此暸解運算子強制型轉 (Coercion) 資料型別的方式是非常重要。

有三種引數型別可傳遞到位元運算子:早期繫結變數、晚期繫結變數和常值資料。 早期繫結變數是用明確型別附註定義的變數。 晚期繫結變數是含有數值資料之型別 Object 的變數。

位元 AND (&)、OR (|) 和 XOR (^) 運算子

如果運算元是晚期繫結或者兩個運算元都是常值,則兩個運算元都強制型轉為 int (System.Int32),然後執行運算且傳回值為 int。

如果兩個運算元都是早期繫結,或者一個運算元是常值而另一個是早期繫結,則必須執行較多的步驟。 這兩個運算元將根據以下兩種情況強制型轉型別:

  • 如果兩個運算元都不是整數,則運算元強制型轉為 int。

  • 如果只有一個運算元是整數,則非整數運算元會強制型轉為整數型別或 int,以較長的型別為主。

  • 如果一個運算元較長,則強制型轉其運算元的型別和較長的運算元長度一致。

  • 如果運算元都是不帶正負號的,則強制型轉其運算元的型別也是不帶正負號的。 否則,強制型轉該型別是帶正負號。

運算元會強制型轉為適當的型別,然後執行位元運算並傳回結果。 結果的資料型別與強制型轉之運算元的型別相同。

當將整數常值、位元運算子和早期繫結變數一起使用時,根據哪一個是可代表該數字的最小型別,會將常值解譯為 int、long、ulong 或 double。 常值 decimal 的值會強制型轉為 double。 根據上述法則,常值的資料型別會經過進一步的強制型轉。

位元 NOT (~) 運算子

如果運算元是晚期繫結、浮點數或常值,則會強制型轉為 int (System.Int32),然後執行 NOT 運算,且傳回值為 int。

如果運算元是早期繫結整數資料型別,則執行 NOT 運算,且傳回型別與運算元型別相同。

位元左移 (<<) 和右移 (>>) 運算子

如果左移運算元是晚期繫結、浮點數或常值,則會強制型轉為 int (System.Int32)。 否則,若左移運算元是早期繫結整數資料型別,則不會執行強制型轉。 右移運算元一律強制型轉為整數資料型別。 然後根據強制型轉的值來執行移位運算,且傳回的結果和左移運算元 (如果是早期繫結) 或型別 int 有相同的型別。

不帶正負號的右移 (>>>) 運算子

如果左運算元是晚期繫結、浮點數或常值,則強制型轉為 uint (System.UInt32)。 否則,若左移運算元是早期繫結整數資料型別,則會強制型轉為相同大小的不帶正負號型別。 例如,int 會強制型轉為 uint。 右移運算元一律強制型轉為整數資料型別。 然後根據強制型轉的值來執行移位運算,且傳回的結果和強制型轉過的左運算元 (如果是早期繫結) 有相同的型別,或傳回型別 uint。

不帶正負號右移的結果,一律都小到足以儲存在傳回型別的帶正負號版本,而不會溢位。

請參閱

概念

運算子優先順序

型別轉換

JScript 中的強制型轉

數值資料

其他資源

JScript 運算子