Cómo transponer eficientemente una matriz de bits 2D

Sigo tropezando con este problema (por ejemplo, enesta pregunta) Dada una matriz / placa / matriz de bits 2D en forma de una matriz de tipos enteros primitivos, p. una serie delong. Por simplicidad, podemos asumir una matriz cuadrada, por ejemplo, una matriz de 64long valores en plataformas que tienen 64 bitslong.

Dejarx[i] para0 <= i < 64 ser la matriz de entrada. Calcular una matrizy[i] para0 <= i <= 64 tal que:

(x[i] >> j) & 1 == (y[j] >> i) & 1

aquíx >> i es el desplazamiento a la derecha bit a bit dex pori pedacitos& es bit a bit yx[i] es el valor enith posición en la matrizx.

Cómo implementar una función que mapea la matrizx para armary más eficientemente?

Principalmente estoy buscando métodos no destructivos, que dejan la matriz de entradax intacto.

Lenguaje de implementación

El lenguaje de programación utilizado debe tener matrices y operaciones bit a bit en tipos enteros. Muchos idiomas cumplen estos requisitos. Las soluciones C / C ++ y Java se verán muy similares, así que elija estos lenguajes.

Respuestas a la pregunta(1)

Su respuesta a la pregunta