在整数值的高/低位中编码多个值有什么好处?

时间:2018-03-30 01:32:37

标签: c# bit-manipulation

我脑子里有这个未经证实的概念,在一个基于整数的值类型中编码两个或多个相关值是有益的,通过读取上下字节,您可以从中提取编码值。

举一个简单的例子,假设我有一个大型的32位无符号整数数组。高16位表示每个32位整数表示Data1,低16位表示Data2

与简单地将具有这些不同值的结构作为单个字段相比,在整数中编码多个较小值有什么好处吗?

1 个答案:

答案 0 :(得分:1)

根据具体情况,这是一种有效的方法。考虑4通道ARGB颜色值。当每个通道各为8位时,这些颜色通常以32位整数存储为0xRRGGBBAA。由于颜色通常涉及性能密集型图形应用程序,因此这是一项非常有用的优化。

在其他情况下,可读性和开发人员友好性通常比这种低级优化技巧更重要。与解构整数相比,阅读,理解和使用多个值的结构要容易得多。

简而言之,取决于。

编辑:

我的印象是图形硬件需要将颜色作为单个整数传递,因此以这种方式存储它们可以节省转换时间。这可能是不正确的,因为我找不到任何证据支持这一点。这种做法可能只是一种惯例。我感谢更有知识渊博的人加入。

潜在的优化用例是指值不能完全适合现有数据类型的大小。考虑想要存储6位值。通过将这些值中的4个存储在单个24位值中,可以节省8位存储器,而不是将每个6位值存储在典型的8位值中。

支持结构整数的原因是可移植性问题。使用little-endian和big-endian的机器将影响多字节值如何存储在内存中。如果程序依赖于多字节值中的特定字节顺序,则可以在不同的机器上翻转该顺序。

一般来说,我个人的感觉是,除非有特定的理由将值打包成单个值,如内存限制,否则支持结构。