Identifizieren ungerade, gerade zahlen - Binär-vs. mod

Kürzlich musste ich erkennen, ob eine Zahl gerade oder ungerade ist, für eine große Anzahl von ganzen zahlen. Ich dachte, von einer Idee zu identifizieren, die eine Zahl als gerade oder ungerade durch UND ing es gegen 1 und vergleichen Sie das Ergebnis mit 1

x & 1 == 1 //even or odd 

Habe ich noch nie gesehen, diese Umsetzung in die Praxis. Der häufigste Weg, Sie immer zu sehen ist :

x % 2 == 0

Ich beschlossen, einige performance-check auf beide Methoden und die binäre Methode scheint etwas schneller auf meinem Rechner.

int size = 60000000;
List<int> numberList = new List<int>();
Random rnd = new Random();

for (int index = 0; index < size; index++)
{
    numberList.Add(rnd.Next(size));
}

DateTime start;
bool even;

//regular mod
start = DateTime.Now;
for (int index = 0; index < size; index++)
{
    even = (numberList[index] % 2 == 0);
}
Console.WriteLine("Regualr mod : {0}", DateTime.Now.Subtract(start).Ticks);

//binary 
start = DateTime.Now;
for (int index = 0; index < size; index++)
{
    even = ((numberList[index] & 1) != 1);
}
Console.WriteLine("Binary operation: {0}", DateTime.Now.Subtract(start).Ticks);

Console.ReadKey();

Hat jemand gesehen der binären Methode implementiert ? Irgendwelche Nachteile ?

InformationsquelleAutor der Frage Ender | 2010-10-11

Schreibe einen Kommentar