Int32和UInt32有什么区别?

时间:2010-02-21 20:03:06

标签: .net int32 uint32

Int32UInt32之间的区别是什么?

如果它们与容量范围功能相同,那么问题是UInt32创建的原因是什么?我应该何时使用UInt32代替Int32

5 个答案:

答案 0 :(得分:39)

UInt32不允许使用负数。来自MSDN

UInt32值类型表示无符号整数,其值范围为0到4,294,967,295。

答案 1 :(得分:10)

整数是-2147483648到2147483647,无符号整数是0到4294967295。

本文可能会对您有所帮助:

http://www.csharp-station.com/Tutorials/Lesson02.aspx

答案 2 :(得分:5)

uint32是一个32位的无符号整数,这意味着您可以表示2 ^ 32个数字(0-4294967295)。

然而,为了表示负数,保留32位中的一位以指示正数或负数。这样你就可以得到2 ^ 31个可能的数字,也可以是正数。结果范围是-2147483648到2147483647(正范围包括值0,因此只有2147483647)。这种表示形式称为int32。

你应该选择无符号的数字,这些数字不能定义为负数,因为它为你提供了更宽的范围,但是你应该记住,从和转换到int32是不可能的,因为int32不能保持uint32的范围反之亦然。

答案 3 :(得分:1)

UInt32未签名。它不能用于表示负数,但可以保留更大的正数。

答案 4 :(得分:-4)

它们之间没有区别。

区别在于它的表示方式,例如通过打印到终端。

例如,为了简单起见,坚持使用8位值:

  • 255是0xff,-1也是0xff
  • 将-1解释为“零左一”,而+1则是“零右一”。
  • -1 + -1 = -2,即“零的左边两个”,也为0xfe。好吧,如果我们将其转换为无符号数学,则它将变为0xff + 0xff = 0xfe。

因此,您看到,有符号和无符号之间没有区别,只有最终我们如何表示它们才有区别,在这种情况下,类型指示了它的表示方式。

当编译器必须通过符号扩展将较小的大小转换为较大的大小时,签名变得很重要。因此,在这种情况下,指示类型很重要,以便编译器可以执行正确的操作。