21

Int32和 和有什么不一样UInt32

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

4

5 回答 5

46

UInt32 不允许负数。来自MSDN

UInt32 值类型表示无符号整数,其值范围从 0 到 2 的 32 或 2**32 的幂(等于 4,294,967,295)。

于 2010-02-21T20:04:50.950 回答
13

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

这篇文章可能会对你有所帮助。

于 2010-02-21T20:05:04.730 回答
10

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

但是,为了表示负数,32 位中保留了一位来表示正数或负数。这会给您留下 2^31 个可能的负数和正数。结果范围是 -2147483648 到 2147483647(正范围包括值 0,因此只有 2147483647)。这种表示称为int32

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

于 2010-02-21T20:47:58.933 回答
2

uint32是无符号 32 位整数。它不能用于表示负数,但可以容纳更大的正数。

于 2010-02-21T20:05:30.987 回答
-3

它们之间没有区别。

不同之处在于它的表示方式,例如通过打印到终端。

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

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

所以你看,有符号和无符号之间没有区别,只是我们最终如何表示它们会有所不同,在这种情况下,类型表示它是如何表示的。

当编译器必须通过符号扩展从较小的大小转换为较大的大小时,签名变得很重要。所以在这种情况下,重要的是要指明一个类型,这样编译器才能做正确的事情。

于 2020-04-28T19:29:32.423 回答