Question

Je peux créer un long littéral en ajoutant un L à la valeur; Pourquoi ne puis-je pas créer littéralement un court ou un octet de la même manière? Pourquoi dois-je utiliser un littéral int avec un casting?

Et si la réponse est "Parce qu'il n'y avait pas de littéral court en C", alors pourquoi n'y a-t-il pas de littéraux courts en C?

Cela n’affecte pas réellement ma vie de manière significative; c'est assez facile d'écrire (court) 0 au lieu de 0S ou autre chose. Mais l'incohérence me rend curieux; c'est l'une de ces choses qui vous dérangent quand vous vous levez tard le soir. Quelqu'un à un moment donné a pris une décision de conception pour permettre la saisie de littéraux pour certains types primitifs, mais pas pour tous. Pourquoi?

Était-ce utile?

La solution

En C, int au moins était censé avoir le caractère "naturel". la taille de mot de la CPU et long était probablement censé être le "plus grand naturel" taille du mot (pas sûr dans la dernière partie, mais cela expliquerait aussi pourquoi int et long ont la même taille sur x86).

À présent, je suppose que pour int et long , il existe une représentation naturelle qui s’inscrit parfaitement dans les registres de la machine. Cependant, sur la plupart des processeurs, les types octet et short plus petits devraient être complétés de toute façon par un int avant d'être utilisés. Si tel est le cas, vous pouvez également avoir un casting.

Autres conseils

Je soupçonne que c'est un cas de "n'ajoute rien à la langue sauf si cela ajoute vraiment de la valeur" - et cela a été perçu comme ajoutant assez peu de valeur pour ne pas en valoir la peine. Comme vous l'avez dit, il est facile de contourner le problème et, franchement, il est rarement nécessaire (de toute façon, pour la désambiguïsation).

La même chose est vraie en C # et je ne l’ai jamais loupé particulièrement dans aucune des deux langues. Ce qui me manque en Java, c’est un type d’octet non signé:)

Une autre raison pourrait être que la machine virtuelle Java ne connaît pas les expressions short et byte. Tous les calculs et toutes les opérations de stockage sont effectués avec des éléments internes, longs, flottants et doubles dans la machine virtuelle.

Il y a plusieurs choses à considérer.

1) Comme indiqué ci-dessus, la machine virtuelle Java n’a aucune notion de type octet ni de type abrégé. Généralement, ces types ne sont pas utilisés dans les calculs au niveau de la machine virtuelle Java; donc on peut penser qu’il y aurait moins d’utilisation de ces littéraux.

2) Pour l'initialisation des octets et des variables courtes, si l'expression int est constante et dans la plage autorisée du type, elle est implicitement convertie vers le type cible.

3) On peut toujours lancer le littéral, par exemple (court) 10

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top