【问题标题】:Convert an array of bools (8 byte bools) to an int or a char by using SSE intrinsics [duplicate]使用 SSE 内在函数将布尔数组(8 字节布尔值)转换为 int 或 char [重复]
【发布时间】:2015-05-02 22:22:18
【问题描述】:

如何使用 SSE 内在函数将布尔数组(8 字节布尔值)转换为 int 或 char?

假设我有这个数组:

bool array[8] = {1,1,0,0,1,0,0,0};

我想将其转换为带有位 '11001000' 的字符。

harold 在here 中建议我使用以下命令执行此操作,但它无法正常工作:

__m128i values = _mm_loadl_epi64((__m128i*)array);
int result = _mm_movemask_epi8(_mm_slli_epi32(values, 7));

【问题讨论】:

  • 看起来应该可以正常工作 - 你得到什么结果?
  • @PaulR ,当我运行它给我 19 这是不正确的。
  • 正如@Tafuri 下面所说,19 是正确的——你只是在以错误的顺序读取位。要么以正确的顺序写出你的数组,要么颠倒结果中位的顺序。
  • 请注意,@harold 现在已经更新了他对您原始问题的回答,为您提供了您似乎需要的相反顺序,所以我将这个问题作为副本关闭。

标签: c++ arrays boolean sse bit


【解决方案1】:

这段代码似乎是正确的,19 确实是正确的输出。请记住,生成结果中的最低有效位将是数组中的第一个布尔值,而不是最后一个。 如果你颠倒数组中布尔值的顺序,你会得到 200 作为结果。

【讨论】:

    猜你喜欢
    • 2012-02-25
    • 1970-01-01
    • 2018-12-02
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 2013-07-04
    • 2014-08-10
    相关资源
    最近更新 更多