1

私が理解できないコードはこれを行います:

int decodeTimeStampByte(final byte timeByte) {
   return timeByte & (~64);
}

たとえば、バイト4c(ASCII L)を取得した場合、上記の関数はそれに対して正確に何をしますか?バイト44はどうですか?

4

4 に答える 4

3

'〜'はビット単位の'ではない'であるため、64 = 0x40 = 0100000bおよび〜64 = 1011111b(下位5ビットセット)。

次に、「&」はビット単位の「および」であり、timeByteの下位5ビットだけを残します。したがって、基本的には、timeByteを0..63の範囲に切り捨てたものです。

decodeTimeStampByte(4c)= 0xC(12)

decodeTimeStampByte(44)= 44

PSはい、上位ビットを忘れました。〜64=1011111b。

これは、コードのバグか、符号ビット(7番目のビット)をそのままにしておく意図のいずれかです。

PPSは、パフォーマンスをさらに向上させるための古代のビットハックのようです

于 2012-04-27T22:14:06.527 に答える
2

このコードはビット6をクリアします。ただし、ビット7が設定されている場合、すべてのビットが8から31に設定されます(バイトをintにキャストするため)。

于 2012-04-27T22:14:44.430 に答える
1

この関数は、正の値の場合は下位6ビットを返し、負の値の場合は7番目のビットをクリアします。したがって、2 ^ 6 = 64、バイナリでは64 = 1000000、バイナリでは〜64 = 0111111は、timeByteの[0..63]と[-128..-65]の間の値をマスクします。

于 2012-04-27T22:14:13.560 に答える
0

この関数は、正の値の場合は下位6ビットを返し、負の値の場合は7番目のビットをクリアします。したがって、2^6=64, 64 = 1000000バイナリでは、バイナリではとの~64 = 0111111間の値をマスクします。[0..63][-128..-65]timeByte

于 2012-06-23T23:21:45.937 に答える