我有一个整数数组,让我们假设它们的类型是int64_t。现在,我知道只有每个整数的前n位是有意义的(也就是说,我知道它们受到一些界限的限制)。
在删除所有不必要的空格的情况下,转换数组的最有效方法是什么(例如,第一个整数位于a[0],第二个整数位于a[0] + n bits,依此类推)?
我希望它尽可能通用,因为n会随时间而变化,尽管我猜可能会有针对特定n的智能优化,比如2的幂或某物的幂。
当然我知道我可以在值上迭代值,我只想问你,StackOverflowers,你能不能想出更聪明的方法。
编辑:
这个问题不是关于压缩数组以占用尽可能少的空间。我只需要从每个整数中“剪切”n bits,并给出数组,我就知道可以安全地剪切的确切n位。
发布于 2010-03-08 03:57:16
我知道这看起来似乎是显而易见的事情,因为我确信实际上有一个解决方案,但是为什么不使用更小的类型,比如uint8_t (最大255)?或者uint16_t (最大65535)?我确信您可以使用定义的值和或操作等对int64_t进行位操作,但是,除了学术练习之外,为什么呢?
在学术练习的笔记上,Bit Twiddling Hacks是一个很好的读物。
https://stackoverflow.com/questions/2397655
复制相似问题