【发布时间】:2015-07-06 15:50:39
【问题描述】:
我正在看 SE6 中 java.io 的 DataInputStream.readLong() 的实现:
private byte readBuffer[] = new byte[8];
public final long readLong() throws IOException {
readFully(readBuffer, 0, 8);
return (((long)readBuffer[0] << 56) +
((long)(readBuffer[1] & 255) << 48) +
((long)(readBuffer[2] & 255) << 40) +
((long)(readBuffer[3] & 255) << 32) +
((long)(readBuffer[4] & 255) << 24) +
((readBuffer[5] & 255) << 16) +
((readBuffer[6] & 255) << 8) +
((readBuffer[7] & 255) << 0));
鉴于 readBuffer[] 是一个 bytes 数组,为什么& 每个字节都需要 255?
当单个字节被转换为 long 时,不应该将 long 的剩余位 (9-64) 位自动设置为零,从而使 & 变得不必要吗?
【问题讨论】:
-
如果你将一个值为 0x81 的字节转换为一个 int,你会得到一个 0xFFFFFF81 的值。
标签: java type-conversion bit-manipulation byte long-integer