Pregunta

Puedo crear un literal largo agregando una L al valor; ¿Por qué no puedo crear un literal corto o byte de alguna manera similar? ¿Por qué necesito usar un int literal con un elenco?

Y si la respuesta es "Porque no había un literal corto en C", entonces ¿por qué no hay literales cortos en C?

Esto en realidad no afecta mi vida de ninguna manera significativa; es bastante fácil escribir (corto) 0 en lugar de 0S o algo así. Pero la inconsistencia me da curiosidad; Es una de esas cosas que te molestan cuando te levantas tarde por la noche. Alguien en algún momento tomó una decisión de diseño para hacer posible ingresar literales para algunos de los tipos primitivos, pero no para todos. ¿Por qué?

¿Fue útil?

Solución

En C, int al menos estaba destinado a tener el " natural " el tamaño de palabra de la CPU y long probablemente fue el "natural más grande" tamaño de palabra (no estoy seguro en la última parte, pero también explicaría por qué int y long tienen el mismo tamaño en x86).

Ahora, supongo que: para int y long , hay una representación natural que se ajusta exactamente a los registros de la máquina. Sin embargo, en la mayoría de las CPU, los tipos más pequeños byte y short tendrían que rellenarse a un int de todos modos antes de usarse. Si ese es el caso, también puedes tener un elenco.

Otros consejos

Sospecho que es un caso de "no agregar nada al idioma a menos que realmente agregue valor". - y fue visto como agregar un valor suficientemente pequeño para no valerlo. Como ha dicho, es fácil moverse y, francamente, rara vez es necesario de todos modos (solo para la desambiguación).

Lo mismo es cierto en C #, y nunca lo he echado de menos en ninguno de los dos idiomas. Lo que extraño en Java es un tipo de byte sin firmar :)

Otra razón podría ser que la JVM no sabe acerca de corto y byte. Todos los cálculos y el almacenamiento se realizan con ints, longs, flotantes y dobles dentro de la JVM.

Hay varias cosas a considerar.

1) Como se discutió anteriormente, la JVM no tiene noción de byte o tipos cortos. En general, estos tipos no se utilizan en el cálculo a nivel JVM; así que uno puede pensar que habría menos uso de estos literales.

2) Para la inicialización de byte y variables cortas, si la expresión int es constante y en el rango permitido del tipo, se convierte implícitamente en el tipo de destino.

3) Siempre se puede emitir el literal, por ejemplo (short)10

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