读书人

CompareTo()函数的行为不是小弟我预期

发布时间: 2013-12-26 15:24:01 作者: rapoo

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, 证明第一个值小于第二个。

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

读书人网 >C#

热点推荐