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的设计。
去看看MSDN吧,先吸收了别人的知识再自己创造。
http://msdn.microsoft.com/zh-cn/library/1kby5hf3(v=vs.110).aspx
------解决方案--------------------C语言没学过?
返回大于0, 证明第一个值大于第二个值。
返回等于0, 相等,
返回小于0, 证明第一个值小于第二个。
对整形来说,很简单,返回值就是第一个值减去第二个值
------解决方案--------------------晕,他返回的是第一个数减去第二个数的结果呀,你再仔细看看,第一个数减去第二个数的结果是什么