Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Allgemein / Mathe / Gerade

Gerade oder Ungerade, das ist hier die Frage

Einführung

Um festzustellen, ob eine Zahl gerade ist (2, 4, 6, ...), wird im Allgemeinen folgendes Verfahren benutzt: "Teile die Zahl durch 2 und prüfe, ob es einen Rest gibt!" Man könnte also u.a. folgende Statements verwenden:

'#1. via Fließkomma-Division:
If x / 2 = Int(x / 2) Then MsgBox "Gerade"

'#2. via Ganzzahlen-Division:
If x = 2 * (x \ 2) Then MsgBox "Gerade"

'#3. via Modulo-Operator:
If x Mod 2 = 0 Then MsgBox "Gerade"

Die Division ist eine relativ aufwändige Operation, daher sind die gezeigten Möglichkeiten nicht optimal im Vergleich zu den unten gezeigten Funktionen. Die verwenden nämlich eine andere Eigenschaft von "Gerader Zahl": In der binären Darstellung ist nämlich das rechteste (niedrig-wertigste) Bit immer 0.

Dadurch wird (in kompilierten Programmen) gegenüber Variante #3 eine Verdoppelung der Geschwindigkeit erreicht (gegenüber #2 eine Vervierfachung und gegenüber #1 sogar eine Verhundertfachung!).

Code / Quelltext

Die folgende Funktion gibt True zurück, wenn die übergebene Zahl gerade, also durch 2 teilbar ist:

Public Function EvenNumber(ByVal n As Long) As Boolean
  EvenNumber = (n And 1&) = 0&
End Function

Die OddNumber-Funktion gibt True zurück, wenn die übergebene Zahl ungerade, also nicht durch 2 teilbar ist:

Public Function OddNumber(ByVal n As Long) As Boolean
  OddNumber = (n And 1&) = 1&
End Function

Man beachte, dass durch Verwendung von 1& bzw. 0& alle Operanden den Datentyp Long haben. Dadurch entfallen automatische Typ-Umwandlungen, der Code wird dadurch schneller.

© Jost Schwider, 01.07.2001-01.07.2001 - http://vb-tec.de/oddeven.htm