Я знаю, что это - downvote-приманка, но если число является достаточно маленьким (как 8 или 16 битов), прямой поиск мог бы быть самым быстрым.
// fill in the table
unsigned short tab[65536];
unsigned short bit = tab[i];
могло бы быть возможно расширить его до 32 битов первым выполнением высокого слова и затем минимума.
//
unsigned long bitHigh = ((unsigned long)tab[(unsigned short)(i >> 16)]) << 16;
unsigned long bitLow = 0;
if (bitHigh == 0){
bitLow = tab[(unsigned short)(i & 0xffff)];
}
unsigned long answer = bitHigh | bitLow;
, вероятно, не лучше, что методы shift-or, но возможно мог быть расширен на большие размеры слова.
(На самом деле, это дает самое высокое 1-разрядное. Необходимо было бы сместить оставленный на 1 для получения следующего более высокого питания 2.)
Из здесь : 'Вы получите эту ошибку, если у вас нет ссылки на «System.Core.dll» (сборка, содержащая основные API-интерфейсы LINQ) . Однако все шаблоны по умолчанию должны включать эту ссылку, если вы нацеливаетесь на .NET3.5. '