我无法理解的代码是这样的:
int decodeTimeStampByte(final byte timeByte) {
return timeByte & (~64);
}
因此,例如,如果我得到字节4c(它是ASCII L),上面的函数到底会做什么呢?字节44怎么样?
答案 0 :(得分:3)
'〜'按位'不',所以64 = 0x40 = 0100000b和~64 = 1011111b(设置低5位)。
然后'&'是按位'和',它只留下timeByte的低5位。所以,基本上,它是timeByte到0..63范围的截断。
decodeTimeStampByte(4c)= 0xC(12)
decodeTimeStampByte(44)= 44
P.S。是的,我忘记了更高的位。 ~64 = 1011111b。
这可能是代码中的错误,也可能是留下符号位(第7位)的意图。
P.P.S。看起来像是一个古老的比特黑客,以挤压更多的表现
答案 1 :(得分:2)
此代码将清除第6位。但如果第7位置1,则将所有位从8设置为31(由于将字节转换为int)
答案 2 :(得分:1)
此函数返回低6位为正值,清除第7位为负值。因此,2 ^ 6 = 64,64 = 1000000二进制,~64 = 0111111(二进制)将掩盖timeByte的[0..63]和[-128 ..- 65]之间的值。
答案 3 :(得分:0)
此函数返回低6位为正值,清除第7位为负值。因此,二进制的2^6=64, 64 = 1000000
,二进制的~64 = 0111111
会掩盖[0..63]
的{{1}}和[-128..-65]
之间的值。