Promociones numéricas en C# [cerrado]

Resuelto Hathibelagal Praneeth asked hace 8 meses • 0 respuestas

En C#, ¿por qué no podemos intagregar long? ¿Por qué el compilador necesita una conversión implícita de inta longpara realizar las operaciones?

Similar a byteto shorto shortto int: ¿por qué se requiere una conversión implícita?

¿Alguien puede explicar claramente el propósito de las promociones numéricas y binarias en C#?

Hathibelagal Praneeth avatar Feb 16 '24 16:02 Hathibelagal Praneeth
Aceptado

La razón es que la Addinstrucción CIL subyacente que el compilador de C# debe usar para sumar valores integrales requiere que ambos valores sean del mismo tamaño.

Por lo tanto, para utilizar la Addinstrucción para sumar dos valores integrales de diferentes tamaños, el compilador de C# debe emitir instrucciones CIL para extender el menor de los dos valores para que tenga el mismo tamaño que el mayor.

Una pregunta de seguimiento obvia sería "¿Pero por qué CIL no incluye instrucciones para sumar valores integrales de diferentes tamaños?". No podemos responder a esa pregunta; sólo los diseñadores de CIL pueden responder por qué.

Sólo podemos adivinar: tal vez porque no era necesario complicar el conjunto de instrucciones CIL y, por lo tanto, su implementación, y muchos procesadores carecen de una Addinstrucción para agregar valores integrales de diferentes tamaños, por lo que agregar eso al conjunto de instrucciones CIL no proporcionaría ningún beneficio.

Sin embargo, tenga en cuenta que el compilador JIT para un procesador con una Addinstrucción que funciona con operandos de diferentes tamaños podría, en teoría, detectar tales casos y emitir instrucciones más eficientes, sin necesidad de soporte directo en el conjunto de instrucciones CIL.

Matthew Watson avatar Feb 16 '2024 10:02 Matthew Watson