请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

对于位运算符的问题

老师,对于代码: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位,所以就没啥问题。

0 回复 有任何疑惑可以回复我~
  • 谢谢老师,那我懂了,因为感觉如果是一个字节的话左移会出问题,但是如果是先转成int的话确实左移是可以的
    回复 有任何疑惑可以回复我~ 2023-02-09 10:56:30
  • Qiujuer 回复 提问者 weixin_慕莱坞8108303 #2
    是的哈,这是java默认隐式转换了
    回复 有任何疑惑可以回复我~ 2023-02-09 20:38:41
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号