java 中的<<是啥意思?byte a= 64 ,i=a<<2,为啥i 就等于256?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中的<<是啥意思?byte a= 64 ,i=a<<2,为啥i 就等于256?相关的知识,希望对你有一定的参考价值。

<<就是把a变量的值按二进制左移2位,
相当于乘2*2=4
所以64*4=256
参考技术A <<是左移位运算符,a<<2表示将a的二进制左移两位。

64转成二进制是1000000,左移2位就是100000000,
实际上就是将a扩大了2的2次方倍(也就是4倍)。
参考技术B 二进制左移
64的二进制是:1000000
左移2个位置之后:
二进制是:100000000
十进制就是 256了
二进制左移1位,相当与乘以2

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

【中文标题】语句“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

【讨论】:

以上是关于java 中的<<是啥意思?byte a= 64 ,i=a<<2,为啥i 就等于256?的主要内容,如果未能解决你的问题,请参考以下文章

java中的tmp_xxx是啥意思?

在 PHP 中声明变量时 `<<` 是啥意思? [复制]

<< 在 Java 中是啥意思?

java 中的Collection<? extends Object>c是啥意思

java中的接口名字后面有<t>是啥意思

java中“?”是啥意思