私は DateTime Equals の実装を見ました:
public bool Equals(DateTime value)
{
return (this.InternalTicks == value.InternalTicks);
}
そして internalticks を見てください
internal long InternalTicks
{
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
get
{
return (((long) this.dateData) & 0x3fffffffffffffffL);
}
}
そして、私はこの数字に気づきました:0x3fffffffffffffffL
つまり:4611686018427387903
しかし、より興味深いのはそのバイナリ表現です:
00111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
^^
||
矢印に注意してください
左矢印だけだったら理解できた0
(正の表現)
しかし、なぜ 2 つ目も
0
?また、なぜ私はそれを数字に
&
したいのでしょう1111....
か? 表示したい場合は、5
する必要はありません5 & 1
。5つだけです。
何か助けはありますか?