Int32
和 和有什么不一样UInt32
?
如果它们与容量范围功能相同,那么问题是出于什么原因UInt32
创建的?我什么时候应该使用UInt32
而不是Int32
?
UInt32 不允许负数。来自MSDN:
UInt32 值类型表示无符号整数,其值范围从 0 到 2 的 32 或 2**32 的幂(等于 4,294,967,295)。
整数是 -2147483648 到 2147483647,无符号整数是 0 到 4294967295。
这篇文章可能会对你有所帮助。
uint32
是一个 32 位的无符号整数,这意味着您可以表示 2^32 个数字 (0-4294967295)。
但是,为了表示负数,32 位中保留了一位来表示正数或负数。这会给您留下 2^31 个可能的负数和正数。结果范围是 -2147483648 到 2147483647(正范围包括值 0,因此只有 2147483647)。这种表示称为int32
。
您应该为根据定义不能为负数的数字选择无符号数,因为它为您提供了更广泛的范围,但您应该记住,从和到的转换int32
是不可能的,因为int32
不能保持范围,uint32
反之亦然。
uint32
是无符号 32 位整数。它不能用于表示负数,但可以容纳更大的正数。
它们之间没有区别。
不同之处在于它的表示方式,例如通过打印到终端。
例如,为简单起见坚持使用 8 位值:
0xff
,-1 也是0xff
。0xfe
. 好吧,如果我们将其转换为无符号数学,则它变为 0xff + 0xff = 0xfe。所以你看,有符号和无符号之间没有区别,只是我们最终如何表示它们会有所不同,在这种情况下,类型表示它是如何表示的。
当编译器必须通过符号扩展从较小的大小转换为较大的大小时,签名变得很重要。所以在这种情况下,重要的是要指明一个类型,这样编译器才能做正确的事情。