将整数矩阵转换为位串?

drjrm3

我有一个4x4整数矩阵(称为tb),可以从位int64_t串(称为state)中创建,如下所示:

for(int i = 0; i < 4; i++) {
    for(int j = 0; j < 4; j++) {
        ipos -= 1;
        tb[i][j] = (state >> (4*_pos)) & 0xf);
    }   
}

但是,一旦我从矩阵开始,如何将其更改为位串?我希望遍历整数矩阵,获取元素,为其创建4位十六进制表示,然后将其移至(<<4)正确的次数并按位或(|)移入具有新位state串的位串,但是我不确定如何执行此操作,或者不确定是否是最佳方法。有想法吗?

哈罗德

当然,请按照您所说的去做,就像这样(未经测试)

for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        pos--;
        state |= (uint64_t)tb[i][j] << (4 * pos);
    }   
}

这具有相当长的依赖关系链,这并不是很好,特别是如果您在HPC中。您可以将其分为上半部分和下半部分,然后将它们组合在一起。另外,这意味着移位使用32位而不是64位,这在某些平台上可能更快。

根据类型的不同tb,可能还会有其他技巧,例如,如果每个条目都是一个字节,并且您可以使用两个别名作为别名uint64_t,则可以使用直线位操作来组合这些条目(尽管与大多数条目相比,它们是“反向的”)方便的订单)。

例如,也许像这样(未测试)(假设顺序相反,也可以用相同的顺序完成)

uint64_t low, high; // inputs
uint64_t even = 0x00FF00FF00FF00FFULL;
uint64_t odd = ~even;
low = (low & even) | ((low & odd) >> 4);
high = (high & even) | ((high & odd) >> 4);
even = 0x0000FFFF0000FFFFULL;
odd = ~even;
low = (low & even) | ((low & odd) >> 8);
high = (high & even) | ((high & odd) >> 8);
low = (low & 0xFFFF) | (low >> 16);
high = (high & 0xFFFF) | (high >> 16);
return low | (high << 32);

如果您允许特殊说明,则可以使用更短的方法(未经测试,然后再次颠倒顺序)

low = _pext_u64(low, 0x0F0F0F0F0F0F0F0FULL);
high = _pext_u64(high, 0x0F0F0F0F0F0F0F0FULL);
return low | (high << 32);

相反的相关转换同样简单,

low = _pdep_u64(bitstring & 0xFFFFFFFF, 0x0F0F0F0F0F0F0F0FULL);
high = _pdep_u64(bitstring >> 32, 0x0F0F0F0F0F0F0F0FULL);

如果您只先反转半字节,则这两种情况也适用于反转顺序,这也可以通过位操作来完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将整数矩阵转换为位串?

来自分类Dev

如何正确地将整数转换为位串?

来自分类Dev

PostgreSQL将位转换为整数

来自分类Dev

将位数转换为32位整数

来自分类Dev

如何将整数转换为位?

来自分类Dev

Elixir一个将浮点数和整数都转换为位串的函数?

来自分类Dev

将位串numpy数组转换为以2为整数的最快方法

来自分类Dev

(Java)将符号的字符串转换为一位整数数组

来自分类Dev

将位串转换为字符

来自分类Dev

将字符串转换为整数

来自分类Dev

将整数转换为字节串-Python

来自分类Dev

将字符串转换为整数

来自分类Dev

如何将整数整数值转换为3位点分隔字符串

来自分类Dev

将字符串转换为拆分,转换为整数

来自分类Dev

JavaScript:将52位整数转换为20位和32位整数

来自分类Dev

将 32 位有符号整数转换为 64 位整数,同时保留精确位

来自分类Dev

VBA:将1x1矩阵转换为整数

来自分类Dev

将n位整数从无符号转换为有符号

来自分类Dev

将8位整数转换为dd / mm / yyyy

来自分类Dev

将4位整数转换为布尔值列表

来自分类Dev

C#将负整数转换为11位

来自分类Dev

将8位整数转换为dd / mm / yyyy

来自分类Dev

将int转换为16位无符号短整数

来自分类Dev

将4位整数转换为十进制的金额

来自分类Dev

将两个32位整数转换为一个带符号的64位整数字符串

来自分类Dev

将包含整数的字符串转换为整数

来自分类Dev

尽可能快地将整数转换为汇编语言(64位,NASM)中的字符串

来自分类Dev

<SOLVED>使用R将十六进制字符串转换为64位整数/时间戳

来自分类Dev

如何将代码点32位整数数组(UTF-32?)转换为Windows本机字符串?

Related 相关文章

热门标签

归档