时间包 `nsec()` 函数
time package `nsec()` function
我对时间包nsec()
功能操作感到困惑。它在时间和纳秒掩码的 wall
属性 上应用 AND
运算符(即 1<<30-1 => 1111111111111111111111111111111)到 return 的纳秒值时间对象。我想知道 ANDING
一个带有 1<<30-1
的数字等于该数字(因为所有数字的值为 1),那么他们为什么要这样做?
func (t *Time) nsec() int32 {
return int32(t.wall & nsecMask)
}
wall
字段是 uint64 类型,它包含的不仅仅是
纳秒:
// From high to low bit position, wall encodes a 1-bit flag (hasMonotonic),
// a 33-bit seconds field, and a 30-bit wall time nanoseconds field.
所以他们在这里做的是提取最后 30 位到
得到纳秒。
我对时间包nsec()
功能操作感到困惑。它在时间和纳秒掩码的 wall
属性 上应用 AND
运算符(即 1<<30-1 => 1111111111111111111111111111111)到 return 的纳秒值时间对象。我想知道 ANDING
一个带有 1<<30-1
的数字等于该数字(因为所有数字的值为 1),那么他们为什么要这样做?
func (t *Time) nsec() int32 {
return int32(t.wall & nsecMask)
}
wall
字段是 uint64 类型,它包含的不仅仅是
纳秒:
// From high to low bit position, wall encodes a 1-bit flag (hasMonotonic),
// a 33-bit seconds field, and a 30-bit wall time nanoseconds field.
所以他们在这里做的是提取最后 30 位到 得到纳秒。