Ce que je veux faire est de prendre une 64-bit unsigned integer composé de paires de bits et de créer à partir d'un entier de 32 bits contenant 0 si les deux bits de la paire correspondante sont 0 et 1 sinon. En d'autres termes, de convertir quelque chose qui ressemble à :
01 00 10 11
en quelque chose qui ressemble à ceci
1 0 1 1
Les deux solutions évidentes sont la force brute de la boucle ou une table de recherche pour chaque octet, puis faire huit recherches et de les combiner dans un résultat final avec OU et le décalage de bits, mais je suis sûr qu'il doit être un moyen efficace de bit-tourner cette. Je le ferai pour les entiers 64 bits en C++, mais si quelqu'un connaît un moyen efficace de le faire pour de courtes entiers je suis sûr que je peux comprendre comment à l'échelle.