Son operandos dentro de una expresión promovidos a tipos más grandes de acuerdo con las siguientes reglas?

StackOverflow https://stackoverflow.com/questions/3080597

Pregunta

Si expresión numérica contiene operandos (constantes y variables) de diferentes tipos numéricos, son operandos promovidos a tipos más grandes de acuerdo con las siguientes reglas:

  1. si los operandos son de tipos byte, sbyte, char, short, ushort, consiguen convertir al tipo int
  2. Si uno de los operandos es int, entonces todos los operandos se convierten a int
  3. si la expresión también contiene operandos de tipos uint y int, entonces todos los operandos se convierten a long
  4. Si uno de operandos es long, entonces todos los operandos se convierten a long
  5. si expresión contiene operandos de tipo ulong y long, entonces operandos se convierten a float
  6. Si uno de los operandos es float, entonces todos los operandos se convierten a float
  7. si uno de operandos es double, entonces todos los operandos se convierten a double

Si se asume expresiones numéricas contiene operandos de diferentes tipos, serán todos los operandos se convierten primero a un solo tipo numérico, y sólo entonces el intento de ejecución para calcular el resultado? Por ejemplo, si las variables b1 y b2 son de tipo byte, mientras i1 es de tipo int, se b1 y get b2 convierte a int antes de (b1+b2) Computing:

int i2=(b1+b2)+i1
¿Fue útil?

Solución

Los paréntesis son de mayor precedencia que +, por lo que la conversión normalmente tener lugar después se han añadido b1 y b2. Sin embargo, el operador + no tiene una sobrecarga para bytes, por lo que los bytes primero deben ser promovidos a ints.

Más información:

Otros consejos

Sus reglas tienen algunos elementos de verdades, pero es técnicamente imprecisa.

Aquí están los extractos pertinentes de la especificación del lenguaje C #

  

7.2.6.2 binarios promociones numéricos

     

promoción numérica binaria se produce para los operandos de los operadores +, , *, /, %, &, |, ^, ==, !=, >, <, >=, y <= binarios predefinidos. promoción numérica binaria convierte implícitamente ambos operandos a un tipo común que, en el caso de los operadores no relacionales, también se convierte en el tipo de resultado de la operación. promoción numérica binaria consiste en aplicar las reglas siguientes, en el orden en que aparecen aquí:

     
      
  • Si alguno de los operandos es de tipo decimal, el otro operando se convierte al tipo decimal, o un error de tiempo de compilación se produce si el otro operando es de float tipo o double.
  •   
  • lo contrario, si alguno de los operandos es de tipo double, el otro operando se convierte al tipo double.
  •   
  • lo contrario, si alguno de los operandos es de tipo float, el otro operando se convierte al tipo float.
  •   
  • lo contrario, si alguno de los operandos es de tipo ulong, el otro operando se convierte al tipo ulong, o un error de tiempo de compilación se produce si el otro operando es de tipo sbyte, short, int, o long.
  •   
  • lo contrario, si alguno de los operandos es de tipo long, el otro operando se convierte al tipo long.
  •   
  • lo contrario, si alguno de los operandos es de tipo uint y el otro operando es de tipo sbyte, short, o int, ambos operandos se convierten a tipo long.
  •   
  • lo contrario, si alguno de los operandos es de tipo uint, el otro operando se convierte al tipo uint.
  •   
  • Si no, los dos operandos se convierten a tipo int.
  •   

  

int i2=(b1+b2)+i1

De acuerdo con la especificación anterior, sí, byte b1, b2 están sujetos a promoción numérica binaria a int para la + operador binario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top