语句“out |= (in & 0x7F) << (bytes++ * 7);”是啥意思?在java中是啥意思?

Posted

技术标签:

【中文标题】语句“out |= (in & 0x7F) << (bytes++ * 7);”是啥意思?在java中是啥意思?【英文标题】:What does the statement "out |= ( in & 0x7F ) << ( bytes++ * 7 );" mean in java?语句“out |= (in & 0x7F) << (bytes++ * 7);”是什么意思?在java中是什么意思? 【发布时间】:2014-04-07 23:33:08 【问题描述】:

当我看到他们的 VarInt 读取代码以读取数据包长度时,我正在查看 Minecraft 的内部数据包处理。作为一个没有任何Java课程的Java开发人员,当我看到out |= ( in &amp; 0x7F ) &lt;&lt; ( bytes++ * 7 );的声明时,我感到很困惑。有人可以向我解释一下吗?提前致谢!

如果您想要完整的代码,只需检查 BungeeCord 的 Github https://github.com/SpigotMC/BungeeCord/blob/master/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java#L70 上的 readVarInt 函数即可。

【问题讨论】:

这意味着有人正在编写神秘代码。 你认为这意味着什么?你有调查过吗? 是的,阅读起来并不难,如果你一块一块地看的话。 (但是对于新手来说可能并不明显,即使在逐段解释之后,它只是简单地获取一系列字节并将每个字节的低 7 位连接在一起(假设in 是从数组或每次迭代中重新加载的)。) 哦,* 是乘法运算符。 【参考方案1】:

我没有查看您包含的链接,但我希望在循环中调用此行,以将存储为 7 位值集合的数字转换回 int 或 long。

您给出的行可以扩展为:

int value = in & 0x7F;            // Grab 7 bits of data from "in"
int shift = bytes * 7;            // Calculate shift amount based on byte index
bytes = bytes+1;                  // Increment byte index (from bytes++)
out = out | (value << shift);     // Shift value and OR into output integer/long

【讨论】:

以上是关于语句“out |= (in & 0x7F) << (bytes++ * 7);”是啥意思?在java中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

ASP中的条件语句和循环语句

第九章 语句

1、 C语言三个循环语句分别是 语句, 语句和 语句

C语言复合语句的使用

C语言分支语句与循环语句

循环语句中,break语句和continue语句有何不同