如果您不介意使用SSE内在函数,那么_mm_movemask_epi8非常适合。它使用16个字节,但是您可以将其他字节设置为零。
例如(未经测试)
__m128i values = _mm_loadl_epi64((__m128i*)array);__m128i order = _mm_set_epi8(0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7);values = _mm_shuffle_epi8(values, order);int result = _mm_movemask_epi8(_mm_slli_epi32(values, 7));
假设数组是一个字符数组。如果您无法做到这一点,那么它将需要更多的负载和打包,这会变得有些烦人。



