【发布时间】:2011-09-26 02:21:16
【问题描述】:
这让我震惊,一定有一个聪明的方法来做到这一点。这不适用于家庭作业、工作或任何事情。我只是在研究一种数据交错的文件格式。
所以,在通用 C/C++ 中,(或其他)给定一些数组
int x[] = ...
有没有聪明的方法把它分成两个短数组
short sa1[], sa2[]
使得 int 数组从中间拆分
x[i] = 1111111111111111 1111111111111111
sa1[i] sa2[i]
编辑:如果措辞不好,请见谅。对于 int 数组的每个第 i 个元素,最左边的 16 位成为一个数组的第 i 个元素,最右边的 16 位成为第二个数组的第 i 个元素。
给定
x[i] = 0001111111111111 1111111100011111
然后
sa1[i] = 0001111111111111
sa2[i] = 1111111100011111
我正在寻找不遍历每个元素并移动和掩盖每个元素的非显而易见的答案。这很容易:)
【问题讨论】:
-
在通用 C/C++ 中?还是在某个特定平台上?
-
@David Schwartz - 通用 C/C++。没关系。
-
您想避免复制吗?让short数组和int数组占用同样的内存?
-
显而易见的答案(线性迭代)是缓存友好的,并且只触及每个元素一次。它可以调整或展开,但如果不并行,则没有太大的改进空间。