为什么unsigned int被认为是long?我错过了什么吗?

时间:2015-03-20 16:24:37

标签: c#

UInt32UInt64uint真的是long吗?我认为unsigned intint之间的唯一区别是unsigned整数没有标记为允许负数,而且它们只能包含正数,对吗?

如果是这样,那么为什么Visual Studio会告诉我:

this.SomeProperty = this.Width - BorderThickness;

无法从long类型转换为类型int

我目前正在使用:

uint BorderThickness;
然而,像往常一样,如果我将其改回:

int BorderThickness;它会起作用。

为什么unsigned intlong?为什么不把它称为long

1 个答案:

答案 0 :(得分:9)

你的问题是基于一种误解。

当您添加,减去,乘以等intuint时,C#会自动将两者都提升为long,因此结果为long。< / p>

C#定义运算符

int + int --> int
long + long --> long
uint + uint --> uint
ulong + ulong --> ulong

等等。在给出奇怪的表达式int + uint时,哪一个是最佳选择?它不能是int + int,因为uint可能不合适;一个uint可能是3000000000,这对于int来说太大了。它不能是uint + uintulong + ulong,因为int可能是负数。最好的选择是long + long,因此结果很长。

您发现了正确的解决方案:首先不要使用uint 。在C#中使用uint几乎没有充分的理由。如果您的数量值大于int中的最大值,请使用long。 C#中的无符号整数主要用于与支持它们的其他语言的互操作性;使用有符号整数编写业务逻辑。