关于_mm_movemask_epi8 intrinsic功能的疑问:示例结果与预期不符求解
关于_mm_movemask_epi8的位映射误解
你搞错了向量元素和掩码位的对应顺序——_mm_movemask_epi8的位映射规则和你想的正好反过来:
- 128位向量里最靠前的字节(也就是你输入的
ff)的最高位,会被放到生成的16位掩码的最低位(第0位); - 向量里第二个字节的最高位对应掩码的第1位;
- 以此类推,第16个字节的最高位对应掩码的第15位。
拿你的例子来说:
你传入的序列是ff 00 00 ... 00,只有第一个字节ff的最高位是1,剩下15个字节的最高位全是0。按照规则,掩码只有第0位是1,其余位为0,转成十六进制就是01,和你得到的结果完全匹配。
你之前的错误在于误以为第一个字节的最高位会对应掩码的最高位,所以才会算出错误的结果。
内容的提问来源于stack exchange,提问作者Blargian
相关产品推荐
相关产品推荐

