Frage

Ich kann eine wörtliche lange erstellen, indem Sie einen L auf den Wert angehängt; warum kann nicht erstelle ich einen wörtlichen kurz oder Byte in einer ähnlichen Art und Weise? Warum muss ich mit einer Besetzung einen int wörtlichen benutzen?

Und wenn die Antwort „Da es keine Kurz war wörtliche in C“, warum gibt es dann keine kurzen Literale in C?

Dies ist nicht wirklich mein Leben in sinnvoller Weise beeinflussen; es ist leicht genug (kurz) 0 statt 0S oder etwas zu schreiben. Aber die Unbeständigkeit macht mich neugierig; es ist eines dieser Dinge, die Sie stören, wenn Sie spät in der Nacht vorhast. Jemand an einem gewissen Punkt machte eine Design-Entscheidung es möglich zu machen Literale für einige der primitiven Typen geben, aber nicht für alle. Warum?

War es hilfreich?

Lösung

In C int zumindest gemeint war die „natürliche“ Wortgröße der CPU haben und long wahrscheinlich bedeutete die „größere natürliche“ Wortgröße zu sein (nicht sicher, in diesem letzten Teil, aber es würde auch erklären, warum int und long haben die gleiche Größe auf x86).

Nun, meine Vermutung ist: für int und long, gibt es eine natürliche Darstellung, die genau in die Maschine Register paßt. aber bei den meisten CPUs, die kleineren Typen byte und short würde zu einer int ohnehin zu gepolstert haben bevor sie verwendet werden. Wenn das der Fall ist, können Sie auch eine Besetzung haben.

Andere Tipps

Ich vermute, es ist ein Fall von „nicht alles auf die Sprache hinzufügen, wenn es wirklich Mehrwert“ - und es wurde als Zugabe ausreichend geringen Wertes zu sehen es nicht wert zu sein. Wie Sie gesagt haben, ist es leicht Runde zu bekommen, und ehrlich gesagt ist es selten nötig sowieso (nur für Begriffsklärung).

Das gleiche in C # wahr, und ich habe noch nie besonders verpasste sie in beiden Sprachen. Was ich vermisse in Java ist ein Byte ohne Vorzeichen Typ:)

Ein weiterer Grund könnte sein, dass der JVM nicht über kurze und Byte nicht kennt. Alle Berechnungen und Speichern mit ints gemacht wird, sehnt sich, die Schwimmer und Doppel in der JVM.

Es gibt mehrere Dinge zu beachten.

1) Wie bereits der JVM diskutiert hat keine Ahnung von Byte oder Short-Typen. Im Allgemeinen sind diese Typen sind nicht in die Berechnung auf der JVM-Ebene verwendet wird; so kann man denken, es weniger Verwendung dieser Literale sein würde.

2) Für die Initialisierung von Byte und kurzen Variablen, wenn der int Ausdruck konstant und im zulässigen Bereich des Typs ist, wird es implizit in den Zieltyp gegossen.

3) Man kann immer werfen die wörtliche, ex (kurz) 10

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top