- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我一直在查看的一些代码:
public static long getUnsignedInt(ByteBuffer buff) {
return (long) (buff.getInt() & 0xffffffffL);
}
是否有理由执行 buff.getInt() & 0xffffffffL
(0xffffffffL
在 32 个最低有效位中有 32 位 1)?在我看来,结果将始终是 buff.getInt()
。
最佳答案
简而言之,这是因为该方法需要将 signed int
(所有 Java int
都是)转换为 无符号数量。
如果您只是执行(long) buff.getInt()
,并且buff.getInt()
返回-1
,那么您最终会得到-1
。这是一个带符号的数量——不是该方法应该返回的数量。
因此,该方法的作用是通过将 int
位与 0x00000000FFFFFFFF
进行 AND 运算,强制 buff.getInt()
变为无符号。这有效地将有符号 int
的位“重新解释”为无符号 int
(实际上是有符号 long
,但因为只有低 32 位是一旦被设置,它就像一个无符号 int
一样工作,产生所需的结果。
例如,(为简洁起见,使用字节)。
假设 buff.getInt()
实际上是 buff.getByte()
,并返回 -1 == 0xFF
尝试将其转换为 int
,最终会得到 0xFFFFFFFF
- 仍然是 -1
,这归因于标志扩展名。
但是,用 0xFF
屏蔽它,最终会得到 0x000000FF
== 255 - 所需的值。
我相信显式转换是不必要的(它不在我的机器上),但我可能会丢失一些东西......
<小时/>编辑:事实证明 Actor 阵容实际上是不必要的。来自 JLS 第 5.6.2 节:
加宽基元转换(第 5.1.2 节)适用于按照以下规则指定转换一个或两个操作数:
double
,则另一个操作数将转换为 double
。float
,则另一个操作数将转换为 float
。long
,则另一个操作数将转换为 long
。int
类型。关于java - buff.getInt() & 0xffffffffL 是一个恒等式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23917613/
我的问题与 this question 略有不同询问如何检查 Go slice 的相等性。 像这样article建议,Go slice 是一个值,由三部分组成:指向数组的指针、段的长度及其容量(段的最
我是一名优秀的程序员,十分优秀!