Long oder int?
Sind nicht alle Zahlen von int (-32.768 bis 32.768) im Zahlenbereich von long (-2.147.483.648 bis 2.147.483.648) enthalten? Kann man dann nicht immer gleich long schreiben?
6 Antworten
Man kann immer das größte nehmen, dann hat man es am einfachsten. Aber der Sinn ist immer das zu nehmen was gerade noch so passt. Es geht hier um Speicherplatz sparen. Das ist eigentlich so wie ich meine noch ein Relikt aus sehr alten Zeiten wo Speicherplatz wirklich teuer war und wenig vorhanden. Heute mit den Terrabyte Festplatten ist es einfach nur noch witzlos. Es gibt auch Programmiersprachen wo man überhaupt nicht mehr das machen muss mit int, double, long, byte (aber kann, wenn man möchte)
Naja was heißt selber der passende Typ verwendet, da wird dann eher ein Datentyp für alle regulären Zahlen genommen wie in JS. Da gibt es dann halt nur Number und das ist eben ein 64bit float. Oder es wird ein Datentyp by default genommen.
Aber welche Sprache prüft bitte wirklich automatisch welches der beste Datentyp wäre?
Nicht unbedingt "der beste", aber "der naheliegendste". Oft gibt es zumindest die Möglichkeit, einen Typ vorzugeben bei der Initialisierung á la
var longVar = 10L;
var decimalVar = 100M;
Ich bin aber ziemlich großer Fan davon, Datentypen angeben zu können - gerade im gegebenen Beispiel der Microcontroller.
Bei welcher Sprache mit strong typing in der die Datentypen implizit bestimmt werden kann man die denn nicht zusätzlich manuell angeben ?
Mir fällt keine ein - aber bevor ich schreibe "bei allen" und Du dann mit einem Gegenbeispiel kommst (da ich ja nicht alle Programmiersprachen kenne), habe ich das defensiv formuliert, so dass der Fall "es geht bei allen" implizit eingeschlossen ist. ;-)
spätestens wenn du graphik lastige sachen machst, merkste wie kurz deine relikt argumentation ist. du denkst nur an festplatten . dabei laufen programme aber nicht auf festplatten sondern im RAM .
Man muss hier auch mal den Fragesteller einbeziehen. Ich sage mal wir sind beide also ich und der Fragesteller das selbe Niveau. Ich schreibe Code, der auf 3 Seiten DIN A4 passt. Ich programmiere u.a. auf einem Mikrokontroller und dessen Speicherplatz konnte ich bisher nicht mehr als 10% mit meinem Programm belasten. Ich betreibe viel also viel Aufwand immer die kleinst mögliche Form zu wählen, meist Integer, manchmal byte. Ich merke keine Einschränkungen in der Performance. Ich mache das auch weil es eben so üblich ist, aber großen Sinn dort zu sparen sehe ich nicht. Es kostet mehr Zeit und hat kaum Nutzen.
Sind nicht alle Zahlen von int (-32.768 bis 32.768) im Zahlenbereich von long (-2.147.483.648 bis 2.147.483.648) enthalten?
Ja, sind es. Integer und Long sind jedoch nicht "feste" Begriffe, die überall gleich benutzt werden, sondern von der Sprache und den Architekturen abhängig.
In vielen modernen Sprachen auf modernen Architekturen ist Integer ein 32-Bit langer Wert - also der Bereich, den du hier jetzt als Long schreibst.
Java z.B. nutzt für Ganzzahlen z.B. Byte für 8 Bit, Short für 16 Bit, Integer für 32 bit und Long für 64 Bit. In C wäre es von der Architektur abhängig, da wird dann aber ein garantiertes Minimum an Speicherplatz für die Datentypen angegeben - so hat ein Integer in C garantiert mindestens 2 Bytes Platz.
Kann man dann nicht immer gleich long schreiben?
kann man theoretisch. Verbraucht halt deutlich mehr Speicher. Was bei modernen Rechnern oftmals weniger interessiert, kann in manchen Bereichen kritisch sein.
Natürlich kann man das. Du kannst auch double nutzen, das geht bis ca. 1.8*10^308
Damit verschenkst Du aber Arbeitsspeicherplatz und Performance für nichts. Das ist nicht viel, aber bei größeren Anwendungen, wenn jede Kleinigkeit ein winziges bisschen verschenkt, macht sich das schon bemerkbar.
Und immer, wenn irgendeine externe Komponente ein int haben will, musst Du casten, jedes einzelne verdammt mal.
Klar, aber braucht halt mehr Speicher, deswegen kann der Datentyp ja auch mehr speichern.
Doch das ist so, allerdings belegt ein long auch selbst mehr Speicherplatz als ein int. Gerade bei Microcontrollern ist das immer ein Thema.
Hab mich grad kurz gewundert, warum bei Arduino ein int nur bis 32.768 ginge anstatt bis 2.147.483.648, und ein long nur bis 2.147.483.648 anstatt bis 9.223.372.036.854.775.807. Dachte der Fragesteller hätte sich vertan, aber ist tatsächlich so.
Deine Antwort war auch darauf eine super Lösung :D
tatsache, hab ich falsch kopiert. ins positive gehts ja immer eins weniger wie ins negative, wegen der 0.
Nur, dass die dann halt selbst den passenden Typ verwenden. Irgendwann braucht halt alles mal einen Datentyp ;-)
Und das ist bei Microcontrollern heute auch noch so.