gpt4 book ai didi

java - 从字节数组中读取 4 位 block

转载 作者:太空狗 更新时间:2023-10-29 12:49:00 25 4
gpt4 key购买 nike

我从外部输入得到一个 byte[],其中每个字节存储两个 4 位值。我的任务是从这个紧密排列的数组中读取索引 idx 的 4 位值。我从来没有写过这样的代码,所以我想知道我下面的解决方案是否正确,如果是,那么是否有更优化的方法来做到这一点。 (请避免“你为什么不自己测试一下”的评论;测试无法证明某事的正确性,只能证明不正确...)。

所以字节和值看起来像(每个 [] 是一个 byte):

[value0|value1] [value2|value3] [value4|value5] [value6|value7]

而且我必须检索索引为 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;

这是正确的、最优的吗?


更新“快速”读者:它不正确,请查看答案。

最佳答案

你的想法应该是正确的,但我认为你可能想更改代码以使用位移位:

if (idx % 2 == 0) {
return array[idx/2] >>> 4; // unsigned bit shift
}else{
return array[idx/2] & 0x0F;
}

因为如果你有 01000011,你可能想要得到 4,3 而不是 64,3

顺便说一句,我个人认为使用else block 代码会更清晰。编译后的操作码不会有任何不同。

关于java - 从字节数组中读取 4 位 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14533367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com