【问题标题】:Difference of using int and uint and when to use使用int和uint的区别以及何时使用
【发布时间】:2011-03-05 08:27:05
【问题描述】:

使用 int 和 uint 有什么区别?到目前为止,我看到的所有示例都使用 int 表示整数。使用 uint 有什么好处?谢谢。

【问题讨论】:

标签: c# unsigned-integer


【解决方案1】:

uint 表示 unsigned int,您可以将其用于 0 .. +4G 范围
其中正常(有符号)int 具有 -2G .. +2G 范围。

什么时候使用它?几乎从不。它不是符合 CLS 的类型,因此您应该永远在程序集的公共接口中使用它。并非所有 .NET 语言都能处理它。

它们的主要用途是对非托管代码和一些罕见的位掩码情况进行 P/Invoke。在 .NET 中,我们使用普通有符号整数进行大多数位掩码。

【讨论】:

  • 那么在实际中只使用 int 更好吗?
  • @Thickbook:是的,直到你有一个非常明确的理由使用 uint,这种情况很少见。
  • @ThickBook:是的,在实践中我也会坚持使用 int。即使您不需要负数,大多数接口上也几乎没有对 uint 的任何支持。强制转换并不是那么简单,因为 uint 可能太高了。只是 int 是标准的,例如对于 Count 和 Length 属性,根据定义,它们永远不会是负数。
  • @Stefan:对。 Count 和 Length 是有符号的,因为如果 IndexOf(其中 -1 == 未找到)的结果是不同的类型会很尴尬。
  • uint 在嵌入式技术中被大量使用。与外部仪器通信。
【解决方案2】:

首先,uint 不符合 CLS(针对 .NET 平台的其他语言不一定实现它),您应该尽可能避免在公共 api 中使用它。好吧,当然它们的范围不同(0...4,294,967,295)对于 uint 和(-2,147,483,648 到 2,147,483,647)对于 int。

【讨论】:

    【解决方案3】:

    主要区别很简单,int 是有符号的,而 uint 是无符号的。因为 uint 不允许负数,它的范围是 0 到 4,294,967,295,而 int 的范围是 -2,147,483,648 到 2,147,483,647

    如果您遇到无法使用负整数或使用负值没有意义的情况,那么无符号整数可能是一个不错的选择。但是,如果您不需要额外的范围并且永远不会低于 0,那么这并不重要,您可以使用 int 来保存字符。

    【讨论】:

      猜你喜欢
      • 2011-08-06
      • 2020-12-26
      • 2012-05-07
      • 2011-04-13
      • 2014-02-07
      • 2011-11-24
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多