有人可以解释一下为什么tr2和tr4显示不同的结果:
auto test1 = _mm256_set1_epi8(-1);
uint64_t tr2 = _mm256_movemask_epi8(test1);
uint32_t tr3 = _mm256_movemask_epi8(test1);
uint64_t tr4 = tr3;
_mm256_movemask_epi8(test1) 应该返回 int32,因此将它分配给 int64 应该只分配低位。
相反,tr2打印 0xFFFFFFFFFFFFFFFF 和tr4打印 0x00000000FFFFFFFF
作为tr4有什么表现吗?
我对 C++ 和内在函数都很陌生,所以也许我遗漏了一些明显的东西。
我正在使用 Visual Studio 2019 C++ 编译器。