我byte[]
从外部输入中得到一个,其中每个字节存储两个4 位值。我的任务是从这个紧凑的数组中读取索引idx的 4 位值。我从来没有写过这样的代码,所以我想知道我下面的解决方案是否正确,如果是,那么是否有更优化的方法来做到这一点。(请让我免于“你为什么不自己测试它”的评论;测试不能证明某事的正确性,只能证明不正确......)。
所以字节和值看起来像(每个 [] 是一个byte
):
[value0|value1] [value2|value3] [value4|value5] [value6|value7]
我必须用 index 检索值idx
。明显地:
- 如果 i 是偶数,则表达式为:
array[idx/2] & 0xF0
- 如果 i 是奇数,则表达式为:
array[idx/2] & 0x0F
所以代码是:
if (idx % 2 == 0) {
return array[idx/2] & 0xF0;
}
return array[idx/2] & 0x0F;
这是正确的和最优的吗?
“快速”读者的更新:这是不正确的,请参阅答案。