Share via


Coerção de operadores bit a bit

Os operadores bit a bit nesta versão do JScript são totalmente compatíveis com os operadores bit a bit em versões anteriores do JScript. Além disso, os operadores de JScript, também podem ser usados em novos tipos de dados numéricos. O comportamento dos operadores bit a bit depende da 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 bound, variáveis de ligação tardia e dados literais. Early-bound variáveis são variáveis definidas com uma anotação de tipo explícito. As variáveis de ligação tardia são variáveis do tipo Object que contêm dados numéricos.

AND bit a bit (&) ou (|) e XOR operadores (^)

Se o operando é tardia ou se ambos os operandos são literais, então ambos os operandos são forçados para int (Int32), a operação é executada e o valor de retorno é um int.

Se os dois operandos forem early-bound, ou se um operando é literal e o outro é early-bound, mais etapas são executadas. Ambos os operandos são forçados a um tipo determinado por duas condições:

  • Se nenhum operando é integral, ambos os operandos são forçados para int.

  • Se houver apenas um operando integral, o operando de nonintegral é forçado para o tipo integral ou forçado para int, o tipo é mais longo.

  • Se um operando for maior, o tipo ao qual o operando é forçado tem o mesmo comprimento como o maior operando.

  • Se qualquer operador for assinado, o tipo ao qual o operando é forçado é assinado. Caso contrário, o tipo forçado é assinado.

Os operandos são então forçados para o tipo apropriado, a operação bit a bit e o resultado é retornado. O tipo de dados do resultado é o mesmo que o tipo dos operandos coagidos.

Ao usar um literal integral com um operador bit a bit e uma variável vinculada antecipadamente, o literal será interpretado como um int, longo, ulong, ou double, dependendo de qual é o menor tipo que pode representar o número. Literal decimal valores são forçados para double. O tipo de dados do literal poderá sofrer ainda mais a coerção, de acordo com as regras descritas acima.

NOT em operador (~)

Se o operando é tardia, ponto flutuante ou um literal forçado para int (Int32), a operação não é executada e o valor de retorno é um int.

Se o operando for o tipo de dados de early bound integral, a operação não é executada e o tipo de retorno é o mesmo que o tipo do operando.

Desvio à esquerda (<<), deslocamento à direita (>>) operadores

Se o operando esquerdo é a ligação tardia, ponto flutuante ou um literal forçado para uma int (Int32). Caso contrário, o operando esquerdo é o tipo de dados integral de early bound e nenhuma coerção é executada. O operando da direita sempre é forçado a um tipo de dados. A operação de shift, em seguida, é realizada nos valores coagidos e o resultado retornado tem o mesmo tipo de operando esquerdo (se early-bound) ou como um tipo de int.

Não assinado à direita (>>>) operadores

Se o operando esquerdo é a ligação tardia, ponto flutuante ou um literal forçado para uma uint (System. UInt32). Caso contrário, o operando esquerdo é o tipo de dados integral de early bound, e ele é forçado para um tipo não assinado do mesmo tamanho. Por exemplo, um int poderia ser forçado para uma uint. O operando da direita sempre é forçado a um tipo de dados. A operação de shift, em seguida, é executada nos valores coagidos e o resultado retornado tem o mesmo tipo de operando esquerdo coagido (se early-bound) ou como um tipo de uint.

O resultado do turno não assinado à direita sempre é pequeno o suficiente para ser armazenado na versão assinada do tipo de retorno sem estouro.

Consulte também

Conceitos

Precedência de operador

Conversão de tipo

Coerção de JScript

Dados numéricos

Outros recursos

Operadores de JScript