【问题标题】:CompareTo() method of short in C#C#中short的CompareTo()方法
【发布时间】:2020-11-12 14:15:20
【问题描述】:

我想在 C# 中使用CompareTo() 方法。当我将它与 longint 数据类型一起使用时,comare 结果是 always -1, 0, 1。 数据类型short 呢?当我比较两个值(小于、大于)时,结果总是一个值取决于比较给定的值,但不是-1, 0, 1 .

我使用 .Net 框架,而不是 .Net 代码。

【问题讨论】:

  • documentation 很清楚。 "小于零:实例小于value"、"零:实例等于value"、"大于零:实例大于value"

标签: c# compare short


【解决方案1】:

这些实现细节是为了性能。请注意,CompareTo 必须只返回 negativepositivezero 值,例如 -1234560;没必要-110

现在让我们看看实现。对于Short(和Byte),我们可以减去,这就足够了:

// Pseudocode
CompareTo() => a - b;

例如

(short)456 - (short)123 == 333 > 0 // so 456 > 123
 (byte)5 - (byte)7      ==  -2 < 0 // so   5 < 7

发生了什么事?对于short 类型,值在[short.MinValue..short.MaxValue] 范围内,即[-32768..32767];当我们减去这些值时,它们将被 cast 转换为 int。请注意,我们保证不会出现整数溢出

-32768 - 32767  == -65535 // min possible value, which is > int.MinValue
 32767 - -32768 ==  65535 // max possible value, which is < int.MaxValue

当我们有intlong 进行比较时,我们不能只是减去;这是一个反例

int.MinValue - 1 == some positive number! It means that MinValue > 1

我们必须比较

// Pseudocode
CompareTo() => 
    a == b ? 0
  : a < b ? - 1
  : 1;

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 2023-03-21
    • 2017-02-02
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多