gpt4 book ai didi

C++ 将矩阵列映射到等级 - 位操作

转载 作者:太空狗 更新时间:2023-10-29 20:15:20 26 4
gpt4 key购买 nike

我有由 uint64_t 表示的(二进制)矩阵(来自 C++11)。我希望能够有效地将任何列映射到第一列。例如

0 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0

uint64_t matrice = 0x4040400040400040uLL;
uint64_t matrice_2 = map(matrice, ColumnEnum::Column2);

1 1 1 0 1 1 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

矩阵_2 包含 0xED00000000000000uLL;

最佳答案

好问题。我真的很喜欢黑客攻击。这是我的解决方案:

uint64_t map(uint64_t x, int column)
{
x = (x >> (7 - column)) & 0x0101010101010101uLL;
x = (x | (x >> 7)) & 0x00FF00FF00FF00FFuLL;
x = (x | (x >> 14))& 0x000000FF000000FFuLL;
x = (x | (x >> 28))& 0x00000000000000FFuLL;
return x << 56;
}

可以在 ideone 找到一个工作示例,调用实际上是 map(matrice, ColumnEnum::Column2)

关于C++ 将矩阵列映射到等级 - 位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13425269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com