Coerção por operadores bit a bit
Os operadores bit a bit nesta versão do JScript são totalmente compatível com os operadores bit a bit em versões anteriores do JScript.Além disso, os operadores de JScript também podem ser usados nos novos tipos de dados numéricos.O comportamento dos operadores bit a bit depende a representação binária de dados, portanto, é importante entender como os operadores de forçar os tipos de dados.
Três tipos de argumentos podem ser passados para operadores bit a bit: variáveis de early limite, variáveis de ligação tardia e dados literal.Early limite variáveis são variáveis definidas com uma anotação de tipo explícito.Atrasado-limite variáveis são variáveis do tipo Object que contêm dados numéricos.
AND bit a bit (&) OR (|) e XOR Operators (^)
Se qualquer operador for atrasado-limite ou se ambos os operandos são literais, ambos os operandos são forçados para int (sistema.Int32), a operação é executada, e o valor retornado é um int.
Se ambos os operandos forem early limite ou se um operando é literal e o Outros é early limite, mais etapas são executadas.Ambos os operandos são forçados para um tipo determinado por duas condições:
Se nenhuma das operando é integral, ambos os operandos são forçados para int.
Se houver apenas um operando inteiro, o operando nonintegral é forçado para o tipo integral ou forçado para int, seja qual for o tipo é mais longo.
Se um operando for maior, o tipo de para o qual o operando é forçado tem o mesmo comprimento sistema autônomo o operando mais tempo.
Se qualquer operador não for assinado, o tipo ao qual o operando é forçado é não assinado.Caso contrário, o tipo de imposto é assinado.
Os operandos são, em seguida, forçados para o tipo apropriado, a operação bit a bit é executada e o resultado é retornado.O tipo de dados do resultado é a mesma sistema autônomo o tipo dos operandos coagidos.
Ao usar um literal inteiro com um operador bit a bit e no início-limite variável, o literal será interpretado sistema autônomo qualquer um int, longo, ulong, ou duplo, dependendo de qual é o tipo de menor que pode representar o número.Literal decimal valores são forçados para duplo.O tipo de dados de literal poderá sofrer ainda mais a coerção de acordo com as regras descritas acima.
Bit a bit do NOT (~) operador
Se o operando for atrasado-limite, ponto flutuante, ou um literal, ele é forçado para int (sistema.Int32), a operação não é executada, e o valor retornado é um int.
Se o operando for early limite integral tipo de dados, a operação não é executada e o tipo de retorno é o mesmo tipo do operando.
Bit a bit Left deslocar (<), Right deslocar Operators (>)
Se o operando esquerdo é atrasado-limite, ponto flutuante, ou um literal, ele é forçado para um int (sistema.Int32).Caso contrário, o operando esquerdo é tipo de dados integral early limite e nenhum coerção é executada.O operando da direita sempre é forçado para um tipo de dados.O deslocar operação é executada em seguida, nos valores coagidos e o resultado retornado tem o mesmo tipo de operando esquerdo (se early-limite) ou sistema autônomo digitar int.
deslocar direita não assinado Operators (>)
Se o operando esquerdo for ligação tardia, ponto flutuante, ou um literal, ele é forçado para um uint (sistema.UInt32).Caso contrário, o operando esquerdo é tipo early-limite dados integral e é forçado a um tipo não assinado do mesmo dimensionar.Por exemplo, um int pode ser forçado para uma uint. O operando da direita sempre é forçado para um tipo de dados.O deslocar operação é executada em seguida, em valores coagidos e o resultado retornado tem o mesmo tipo que o operando esquerdo coagido (se early-limite) ou sistema autônomo digitar uint.
O resultado do deslocamento à direita não assinado sempre é pequeno o suficiente para ser armazenado na versão assinada do tipo de retorno sem estouro.