对于位运算符的问题
来源:5-1 UDP搜索IP与端口-1
weixin_慕莱坞8108303
2023-02-03
老师,对于代码:short cmd = (short)((clientData[index++] << 8) | (clientData[index++] & 0xff));
,其中的clientData[index++] << 8
内部具体是怎么完成的,因为java中左移操作不是高位会被移除吗,那这样的话,对于一个8位的字节来说,左移8位不就都是0了,怎么会使一个字节在左移8位之后扩展到两个字节,最后再强转到short类型
写回答
1回答
-
java的位操作会自动转型为int来进行;也就是说如果我们没加(short)强转,那么最终的值是一个int值。
clientData[index++] 会先转化为 int,高位补0,然后再左移8,此时也是一个Int,所以左移的数据并不会被丢掉。
最后是将int转位short,此时会丢掉左边的16位;但我们有效的其实是尾部的16位,所以就没啥问题。022023-02-09
相似问题