日期:2014-05-17  浏览次数:20891 次

CompareTo()函数的行为不是我预期的,为什么?
作为一个比较函数,我预期CompareTo返回的int类型是1(左>右)或者0(左=右)或者-1(左<右)。
可是我写了几行小程序,发现CompareTo似乎总是返回两个数当中较小的一个,如下所示:

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(sbyte.MaxValue);//127
            Console.WriteLine(sbyte.MinValue);//-128
            Console.WriteLine(System.SByte.MaxValue.CompareTo(System.SByte.MinValue));//255
            Console.WriteLine(((sbyte)127).CompareTo((sbyte)-30));//157
            Console.WriteLine(((sbyte)20).CompareTo((sbyte)10));//10
        }
    }


问题是,每次都是返回比较小的那个数。这是为什么呢?
而且CompareTo的结果似乎把一个负整数变成了一个正数(补码)来返回。例如 127.CompareTo(-128)返回255,这个是0xff。为什么符号也被去掉了。

------解决方案--------------------
引用
我预期CompareTo返回的int类型是1(左>右)或者0(左=右)或者-1(左<右)


你的预期就是错的,这是你脑袋里想的,不是人家CompareTo的设计。
去看看MSDN吧,先吸收了别人的知识再自己创造。

http://msdn.microsoft.com/zh-cn/library/1kby5hf3(v=vs.110).aspx
------解决方案--------------------
C语言没学过?

返回大于0, 证明第一个值大于第二个值。
返回等于0, 相等,
返回小于0, 证明第一个值小于第二个。

对整形来说,很简单,返回值就是第一个值减去第二个值
------解决方案--------------------
晕,他返回的是第一个数减去第二个数的结果呀,你再仔细看看,第一个数减去第二个数的结果是什么