Warum Ganzzahl anstelle von Lang verwenden?
Sehe ich oft Fragen in Bezug auf Overflow
Fehler mit vba.
Meine Frage ist, warum verwenden die integer
Deklaration von Variablen, anstatt einfach zu definieren alle numerischen Variablen (ohne double
etc.) als long
?
Sofern Ihre Durchführung eine operation wie in einer for-Schleife, wo Sie garantieren können, dass Sie den Wert nicht überschreiten, die 32.767 Grenze, gibt es einen Einfluss auf die Leistung oder etwas anderes, das diktieren nicht mit long
?
InformationsquelleAutor der Frage Gareth | 2014-10-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
msdn
msdn
So, der Vorteil ist die reduzierte Speicher. Eine Ganzzahl dauert bis die Hälfte der Speicher, eine lange dauert. Nun, wir reden hier über 2 Byte, so dass es nicht einen großen Unterschied machen, es sei denn, Sie speichern eine TONNE zahlen.
ABER auf eine 32 bit-system, ein 16-bit-integer wird stillschweigend umgewandelt zu lange ohne den Vorteil der größeren Spanne von zahlen, mit zu arbeiten. Überläufe immer noch passieren, und es dauert nur so viel Speicher. Die Leistung kann sogar sein, dass hurt , weil der Datentyp umgewandelt werden (auf einem sehr niedrigen Niveau).
Nicht der Hinweis, den ich suchte, aber....
ozgrid Foren
Dies ist der Hinweis, den ich suchte.
pcreview forum
Und endlich fand ich die msdn-Dokumentation ich war wirklich wirklich suchen.
So, in Zusammenfassung, gibt es fast keinen guten Grund für die Verwendung einer
Integer
geben in diesen Tagen. Es sei denn Sie müssen Interop mit einer alten API-Aufruf, der erwartet, dass ein 16-bit-int.Dank Vba4All für den Hinweis.
InformationsquelleAutor der Antwort RubberDuck
Wie bereits in anderen Antworten, der wirkliche Unterschied zwischen int und long ist die Größe des Speicherbereichs und damit die Größe der Zahl kann es halten.
hier ist die vollständige Dokumentation auf diese Datentypen
http://msdn.microsoft.com/en-us/library/office/ms474284(v=office.14).aspx
einer Integer ist 16 bits und repräsentieren einen Wert zwischen 32.768 und 32,768
einen Lange ist 32 bit und repräsentieren zwischen-2.147.483.648 bis 2.147.483.648 kommt
und es ist ein LongLong die 64 bit und verarbeiten kann, wie 9 pentilion
Eines der wichtigsten Dinge zu erinnern, über diese ist, dass die Datentypen unterscheiden sich durch Sprache und Betriebssystem /Plattform. In Ihren VBA-lange ist 32 bit, aber in c# auf einem 64-bit-Prozessor, eine lange 64 bit. Dies kann schwerwiegende Verwirrung.
Obwohl VBA keine Unterstützung für Sie, wenn Sie wechseln Sie zu einer anderen Sprache .net oder java oder andere, die ich viel lieber mit den system-Datentypen von int16int32 und int64 die es mir erlaubt b viel mehr Transparenz über die Werte, die gehalten werden können, die in diese Datentypen.
InformationsquelleAutor der Antwort Patrick
VBA hat eine Menge von historischen Gepäck.
Einer
Integer
ist 16 bit breit, und es war eine gute default-numeric-Typ zurück, wenn 16-bit-Architektur/word Größen verbreitet waren.Einen
Long
ist 32 bit breit und (IMO) sollte verwendet werden, wo immer möglich.InformationsquelleAutor der Antwort Alex K.
Dies ist ein Raum vs Notwendigkeit problem.
In einigen Situationen ist es eine Notwendigkeit zu verwenden, eine lange. Wenn Sie die Schleife durch die Zeilen in eine große excel-Datei, die die variable enthält die Nummer der Zeile sollte eine lange.
Aber manchmal werden Sie wissen, dass ein integer verarbeiten kann dein problem mit einem long wäre eine Verschwendung von Raum (Speicher). Die einzelnen Variablen wirklich nicht machen viel Unterschied, aber wenn Sie anfangen, den Umgang mit arrays es kann einen großen Unterschied machen.
In VBA7, Integer sind 2 Byte und Long sind 4 bytes
Wenn Sie ein array von 1 million zahlen zwischen 1 und 10, mit der ein Integer-array dauern würde, bis über 2MB RAM, im Vergleich zu etwa 4 MB RAM für ein langes array.
InformationsquelleAutor der Antwort Alter
Vielleicht ein CS grad kann es besser erklären, aber ist ja ein integer benötigt weniger Speicher (nicht relevant, in eine sehr einfache VBA-Skript).
Es auch garantiert/wird überprüft, ob die variable immer eine Ganzzahl sein (nicht-dezimalen). Ich bin mir ziemlich sicher, dass wenn Sie speichern 6.7 als integer konvertiert wird, um die Anzahl 7 in VBA.
Ist es möglicherweise nicht die beste Vorgehensweise, um dies zu tun, aber es kann Fälle geben, wo dies notwendig ist. Ich glaube, das Hauptziel ist die Validierung von Daten/integrity. Insbesondere, yes for-Schleifen, wo etwas getan werden muss, tritt eine Anzahl von X mal -- dezimal-würde keinen Sinn machen.
Primäre Unterschied ist der Speicher obwohl-wenn ich daran erinnern, lange ist 64-bit und integer 32 bit.
InformationsquelleAutor der Antwort John Babson