gpt4 book ai didi

c# - DateTime 通过内部刻度进行比较?

转载 作者:可可西里 更新时间:2023-11-01 08:44:23 25 4
gpt4 key购买 nike

我查看了 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(正表示),我就能理解

  • 但为什么第二个也是0

  • 此外,为什么我每个人都希望它是 &1111.... 号码?如果我想显示 5 我不必执行 5 & 1 ,只需 5。

有什么帮助吗?

最佳答案

您可以从Reference Source 获得此类信息。 . dd/ndp/clr/src/bcl/system/datetime.cs 中最相关的声明:

    private const UInt64 TicksMask             = 0x3FFFFFFFFFFFFFFF;
private const UInt64 FlagsMask = 0xC000000000000000;
private const UInt64 LocalMask = 0x8000000000000000;
private const Int64 TicksCeiling = 0x4000000000000000;
private const UInt64 KindUnspecified = 0x0000000000000000;
private const UInt64 KindUtc = 0x4000000000000000;
private const UInt64 KindLocal = 0x8000000000000000;
private const UInt64 KindLocalAmbiguousDst = 0xC000000000000000;
private const Int32 KindShift = 62;

请注意 Kind 值如何映射到这两位。

    public DateTime(long ticks, DateTimeKind kind) {
// Error checking omitted
//...
this.dateData = ((UInt64)ticks | ((UInt64)kind << KindShift));
}

关于c# - DateTime 通过内部刻度进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com