Определение четных и нечетных чисел - двоичное или модульное

Недавно мне пришлось определить, является ли число четным или нечетным для большого количества целых чисел. Я подумал об идее идентифицировать число как нечетное или четное, складывая его с помощью И против 1 и сравнивая результат с 1

x & 1 == 1 // even or odd 

. Я никогда не видел такой реализации на практике. Наиболее распространенный способ, который вы всегда видите:

x % 2 == 0

Я решил проверить производительность обоих методов, и двоичный метод кажется немного быстрее на моей машине.

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();

Кто-нибудь видел, как реализован бинарный метод? Есть недостатки?

11
задан Ender 11 October 2010 в 20:20
поделиться