2017-05-11 1 views
1

これは私のコードです。最後の3ビットを0に設定する必要があります。私のコードは動作しません。最後の3ビットを0に設定したいのですが、私のコードがどこで間違っているのか分かりません。

Calendar calendar = Calendar.getInstance(); 
long time = calendar.getTimeInMillis(); 
time &= ~0x7; 
LogUtil.i("test",String.format("%x %s",~0x7,time)); 

これは、それがどうあるべきか

fffffff8 1506830400944

fffffff8 1506830400000でログインしています!

+0

を? – Eran

+4

最後の3ビットを0に設定すると、時間が0〜7ミリ秒短縮されます。それは本当にあなたが望むものか、最後の3桁を意味しますか?つまり、あなたは '1506830400000'を期待していますか? – Thomas

+4

最後の3桁をゼロに設定する予定があるなら、それはうまくいきます:time = time - (time%1000); –

答えて

4

あなたの番号は実際に変換されています。最後の3桁は実際に0に設定されています。あなたがそれらを見ない理由は、バイナリレベルで変換されることです。

10101111011010110000101110011110110110000 
             ^^^ 
          last 3 digits are zero 

ジャストラインtime &= ~0x7;前と後timeを印刷し、あなたは違いが表示されます:

バイナリへ1506830400944の変換は、このです。


あなたは10進数表現のためにゼロに最後の3桁の数字を設定したい場合は、単にような何か行うことができます:あなたは、この出力が間違っていると思うのはなぜ

time=(time/1000)*1000 
+1

ああ....私の神。そうですか。ありがとう。 – Cyrus

関連する問題