¿Por qué long int tiene un modificador literal, pero short int no?
La pregunta es "¿por qué C# no tiene esta función?" La respuesta a esa pregunta es siempre la misma. Las características no se implementan por defecto; C# no tiene esa característica porque nadie diseñó, implementó y envió la característica a los clientes.
La ausencia de una característica no necesita justificación. Por el contrario, todas las características deben justificarse mostrando que sus beneficios superan sus costos. Como persona que propone la función, usted tiene la responsabilidad de describir por qué cree que la característica es valiosa; no me corresponde a mí explicar por qué no lo es.
Probablemente hay una fuerte razón para proporcionar modificadores literales para algunos tipos, pero no para todos. ¿Qué es?
Ahora que es una pregunta más respondible. Ahora la pregunta es "¿qué justifica el sufijo literal a largo, y por qué no es también una justificación para un sufijo literal similar en abreviatura?"
enteros se pueden utilizar para una variedad de propósitos. Puede usarlos como números aritméticos. Puede usarlos como colecciones de indicadores de bit. Puede usarlos como índices en matrices. Y hay muchos usos más especiales. Pero creo que es justo decir que la mayoría de las veces, los enteros se usan como números aritméticos.
La gran mayoría de los cálculos realizados en números enteros por programas normales implican números que son mucho, mucho menores que el rango de un entero de 32 bits con signo, aproximadamente +/- dos mil millones. Y un montón de hardware moderno es extremadamente eficiente cuando se trata únicamente de enteros de 32 bits. Por lo tanto, tiene sentido hacer que la representación por defecto de los números tenga enteros de 32 bits. C# está por lo tanto diseñado para hacer que los cálculos que involucran enteros de 32 bits se vean perfectamente normales; cuando dice "x = x + 1", se entiende que "1" es un entero de 32 bits con signo, y las probabilidades son buenas de que x también lo es, y el resultado de la suma también lo es.
¿Qué ocurre si el cálculo es integral pero no encaja en el rango de un entero de 32 bits?los enteros "largos" de 64 bits son un siguiente paso lógico; también son eficientes en una gran cantidad de hardware y longs tienen un rango que debe satisfacer las necesidades de prácticamente cualquier persona que no está haciendo combinatoria de servicio pesado que involucran números extremadamente grandes. Por lo tanto, tiene sentido tener alguna forma de especificar clara y concisamente en el código fuente que este literal aquí debe tratarse como un entero largo.
Escenarios de interoperabilidad, o escenarios en los que los enteros se utilizan como campos de bits, a menudo requieren el uso de enteros sin signo. De nuevo, tiene sentido tener una forma de especificar clara y concisamente que este literal está destinado a tratarse como un entero sin signo.
Por lo tanto, en resumen, cuando vea "1", es probable que la mayoría de las veces el usuario intente utilizarlo como un entero de 32 bits con signo. Los siguientes casos más probables son que el usuario tiene la intención de que sea un entero largo o un int sin firmar o unsigned long. Por lo tanto, hay sufijos concisos para cada uno de esos casos.
Por lo tanto, la función está justificada.
¿Por qué no es una justificación para los pantalones cortos?
Porque en primer lugar, en todos los contextos en que un breve es legal, ya es legal usar un literal entero. "corto x = 1;" es perfectamente legal; el compilador se da cuenta de que el entero se ajusta a un breve y le permite usarlo.
En segundo lugar, aritmética nunca se hace en pantalones cortos en C#. La aritmética se puede hacer en ints, uints, longs y ulongs, pero la aritmética es nunca hecha en cortocircuitos. Los cortos se promocionan a int y la aritmética se realiza en ints, porque como dije antes, la gran mayoría de los cálculos aritméticos se ajustan a un int. La gran mayoría hace no encaja en un corto. La aritmética breve es posiblemente más lenta en hardware moderno que está optimizado para ints, y la aritmética corta no ocupa menos espacio; se va a hacer en ints o longs en el chip.
Quiere un sufijo "largo" para decirle al compilador "esta aritmética debe hacerse en largos" pero un sufijo "corto" no le dice al compilador "esta aritmética debe hacerse en cortocircuitos" porque eso es simplemente no es una característica del lenguaje C# para empezar.
Las razones para proporcionar un sufijo largo y una sintaxis sin signo no se aplican a los cortos. Si cree que hay un beneficio convincente para la función, indique cuál es el beneficio. Sin un beneficio que justifique sus costos, la función no se implementará en C#.
Eche un vistazo a esta pregunta (y la respuesta de Eric Lippert): http://stackoverflow.com/questions/1678591/why-are-number-suffixes-necessary –