Spojrzałem na DateTime Równa realizacja:Porównywanie dat według czasu według wewnętrznych znaczników?
public bool Equals(DateTime value)
{
return (this.InternalTicks == value.InternalTicks);
}
a następnie spojrzeć na internalticks
internal long InternalTicks
{
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
get
{
return (((long) this.dateData) & 0x3fffffffffffffffL);
}
}
I wtedy zauważyłem, że ten numer: 0x3fffffffffffffffL
która jest: 4611686018427387903
Ale więcej interesujące jest jego binarny reprezentacja:
00111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
^^
||
Proszę zauważyć strzałkami
mogłem zrozumieć jeśli tylko w lewo strzałka byłby 0
(dodatnia reprezentacja)
Ale dlaczego drugi jest również
0
?Ponadto, dlaczego chciałbym, aby każdy miał numer
&
z numerem1111....
? jeśli chcę, aby wyświetlić5
Nie mam zrobić5 & 1
, zaledwie 5.
pomocy?
Złożenie zer po lewej stronie (2 zera) przypomina porównywanie bez DateTimeKind ... prawda? –
Dobrze. Jest to * maska *, za pomocą operatora & maskuje wartości tych bitów i czyni je zerowymi. –
@RoyiNamir Tak, podczas porównywania ignoruje 'Kind', maskując go. (Zła decyzja IMO) – CodesInChaos