Digamos que tiene uint64_t y solo se preocupa por el bit de orden superior para cada byte en su uint64_t. De este modo:Bits de orden superior: Tómelos y conviértase en uint64_t en uint8_t
uint32_t: 0000 ... 0000 1000 0000 1000 1000 0000 1000 0000 ---> 0000 1111
¿Hay una manera más rápida que:
return
(
((x >> 56) & 128)+
((x >> 49) & 64)+
((x >> 42) & 32)+
((x >> 35) & 16)+
((x >> 28) & 8)+
((x >> 21) & 4)+
((x >> 14) & 2)+
((x >> 7) & 1)
)
Aka desplazamiento x, ¿Enmascarar y agregar el bit correcto para cada byte? Esto compilará mucho ensamblaje y estoy buscando una forma más rápida ... La máquina que estoy usando solo tiene las instrucciones SSE2 y no pude encontrar operaciones SIMD útiles.
Gracias por la ayuda.
puede reinterpretar los bytes individuales, recorrerlos y enmascarar los bits individuales. No sé si esto es más rápido, pero tal vez el compilador pueda optimizarlo mejor. – PlasmaHH
Quizás primero puedas enmascarar con '0x8080808080808080' y luego multiplicar por una constante particular para colocar los bits en ubicaciones más convenientes, tal vez para usar en una tabla de búsqueda. –
¿Necesita el resultado, es decir, una secuencia de 8 bits como número? ¿O simplemente comprobar si los bits HO son '1' o no, es suficiente para usted? – nullpotent