7

在 .Net 框架的 DateTime 结构中,Year 被定义为一个 int(实际上是 A System.Int32)。但是,MSDN 文档说该值将始终介于 1 和 9999 之间。因此,ushort (System.UInt16) 足以存储值并占用一半的空间。那么为什么它是 int 而不是 ushort 呢?

存在从 ushort 到 int 的隐式转换,因此不需要进行强制转换来对 Year 进行整数运算。

我意识到这是一个微优化问题,因此不是很重要。我只是好奇。

4

2 回答 2

4

因此,ushort (System.UInt16) 足以存储值并占用一半的空间。

你认为“空间”在哪里被浪费了?DateTime无论如何都不会将每个组件存储在单独的字段中。如果将年份存储在某个地方,请随意将其转换为ushort- 并Month转换为 abyte等。

请注意,这ushort不符合 CLS,这可能是它的原因。有很多属性对于未签名是有意义的,例如string.Length等......但框架会尽可能地符合 CLS。

于 2012-06-21T14:46:54.433 回答
0
  • unit 返回一个无符号的 16 位整数
  • Int 返回一个 32 位整数。

我假设 JIT 编译器利用 CPU 架构,因此 32 位的处理将比 16 位更有效。我相信在使用整数与长整数(分配的字节数与架构速度)时,VB6 也存在类似的争论。

http://blogs.msdn.com/b/davidnotario/archive/2005/08/15/451845.aspx

于 2012-06-21T14:51:41.587 回答