【发布时间】:2012-04-16 11:43:57
【问题描述】:
我正在阅读一些关于优化方法的问题。
在如何对特定范围内的数字进行排序的问题中,解决方案是使用位图。如果可以出现一个数字,例如最多 10 次使用半字节来映射数字并作为计数器来表示出现次数。
这个概念我很好理解。我的问题是如何以简单的方式在 Java 中实现这一点。
我卡在位操作上。
例如,对于将计数器增加 1 的第一部分,我能想到的是:
定位字节
例如。 bitValue[i]
然后执行byte tmp = bitValue[i] & 0x0F 以获取低位(如果计数器是低位计数器)。
然后执行 tmp = tmp + 1 以增加 1。
然后执行bitValue[i] >> 2 清除低端位,然后执行bitValue[i] <<2 恢复。现在我们有与原始相同的高位和清除低位。
然后执行bitValue[i] |= tmp 设置低位。
现在bitValue 的低位计数器增加了 1。对吗?
对于高位,这将是相同的过程,但对于高位。
然后当我必须检查计数器的编号时。
我想使用位掩码:0x0 0x1 0x2 等并使用 OR 检查当前计数器编号是多少。
所有这些似乎都太复杂了。我在正确的轨道上吗?在 Java 编码中如何最好地处理这些操作?
非常欢迎对此提供任何意见和指导。
【问题讨论】:
-
你是在学习优化还是优化?如果您实际上是在优化,您是否发现了性能问题,或者您是否假设您正在做的事情是必要的? FWIW,可能没有必要。
标签: java bit-manipulation bit programming-pearls