Перевод bool[64] в ulong

У меня есть bool[64] массив, который нужно первевести в ulong. Я пол дня пытался, но у меня ничего не получилось. И пожалуйста напишите объяснение


Ответы (1 шт):

Автор решения: aepot

Не факт, что идеальное решение, но рабочее.

private ulong ArrayToUInt64(bool[] arr)
{
    if (arr.Length < 64)
        throw new ArgumentException("Wrong array length", nameof(arr));
    ulong result = 0;
    ulong j = 1;
    for (int i = 0; i < 64; i++)
    {
        if (arr[i])
            result |= j;
        j *= 2;
    }
    return result;
}

Точно надо объяснять? Простая двоичная арифметика. 1 - первый бит, 2 - второй, 4 - третий, 8 - четвертый, и так далее 63 раза умножить на два. Оператор | - двоичное сложение "или", включает бит.

→ Ссылка