我无法理解的代码是这样做的:
int decodeTimeStampByte(final byte timeByte) {
return timeByte & (~64);
}
例如,如果我得到字节 4c(即 ASCII L),那么上面的函数究竟会做什么呢?字节 44 怎么样?
我无法理解的代码是这样做的:
int decodeTimeStampByte(final byte timeByte) {
return timeByte & (~64);
}
例如,如果我得到字节 4c(即 ASCII L),那么上面的函数究竟会做什么呢?字节 44 怎么样?
'~' 是按位'not',所以 64 = 0x40 = 0100000b 和 ~64 = 1011111b(低 5 位设置)。
然后'&'是按位'and',它只留下timeByte的低5位。所以,基本上,它是 timeByte 到 0..63 范围的截断。
decodeTimeStampByte(4c) = 0xC (12)
decodeTimeStampByte(44) = 44
PS是的,我忘记了高位。~64 = 1011111b。
它要么是代码中的错误,要么是为了保留符号位(第 7 位)。
PPS 似乎是一种古老的比特黑客来挤压更多的性能
此代码将清除位 6。但如果设置了位 7,它将设置从 8 到 31 的所有位(由于将字节转换为 int)
该函数返回低 6 位为正值,清除第 7 位为负值。因此,二进制的 2^6=64, 64 = 1000000,二进制的 ~64 = 0111111 将屏蔽 timeByte 的 [0..63] 和 [-128..-65] 之间的值。
该函数返回低 6 位为正值,清除第 7 位为负值。因此,2^6=64, 64 = 1000000
在二进制中,~64 = 0111111
二进制会屏蔽 和 之间[0..63]
的[-128..-65]
值timeByte
。