作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以解释一下下面的代码片段吗?
methodAttributeLength = (long)dis.readUnsignedShort() << 16 | dis.readUnsignedShort();
我在 java doc 中检查了这一点。但我不明白。我知道什么是 java.io.DataInputStream.readUnsignedShort()
方法确实如此。但问题是 <<16
东西。
最佳答案
DataInputStream#readUnsignedShort返回 int
花费 32 位,但是 short
类型花费 16 位。
int << 16
将低 16 位移至高 16 位并填充 0
在低16位。例如:
int value = 0b11111111000000001000000011111111;
^---------------
int high = 0b10000000111111110000000000000000;
// high == value << 16
在本例中,|
运算符是将高位和低位连接在一起。例如:
int high = 0b10000000111111110000000000000000;
int low = 0b00000000000000001000000000000001;
int value = 0b10000000111111111000000000000001;
// value == high | low;
另一方面,您的协议(protocol)保存了 int
一分为二short
s 是一个高 short
和低short
。上面的代码是 int
两个值 short
s。
更多详情可以查看bitewise operators和 shift operators .
关于Java readUnsignedShort() 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44094526/
这个问题已经有答案了: What does >> do in Java? (4 个回答) 已关闭 6 年前。 有人可以解释一下下面的代码片段吗? methodAttributeLength = (l
我是一名优秀的程序员,十分优秀!