代码之家  ›  专栏  ›  技术社区  ›  simendsjo

作为索引的无符号数与有符号数

  •  8
  • simendsjo  · 技术社区  · 14 年前

    在.Net中使用有符号数字作为索引的理由是什么?

    在Python中,可以通过发送负数从数组的末尾开始索引,但在.Net中不是这样。 对于.Net来说,在以后添加这样的功能并不容易,因为它可能会破坏其他代码,可能会使用索引方面的特殊规则(是的,这是一个坏主意,但我猜这是会发生的)。

    这可能是因为在代码中使用有符号的数字更正常吗?

    编辑:我刚找到以下链接:

    The perils of unsigned iteration in C/C++

    Signed word lengths and indexes

    • 与c互操作
    4 回复  |  直到 14 年前
        1
  •  3
  •   Rotsor    14 年前

    为了简单起见。你喜欢吗? trouble

        2
  •  5
  •   Arne    14 年前

        3
  •  2
  •   Hans Olsson    14 年前

    未签名不符合CLS。

        4
  •  0
  •   supercat    12 年前

    无符号数的主要用途是将较大的数从较小的数合成,反之亦然。例如,如果从一个连接接收到四个无符号字节,并希望将它们的值作为一个32位整数,那么使用无符号类型意味着可以简单地说:

      value = byte0 | (byte1*256) | (byte2*65536) | (byte3*16777216);
    

    相比之下,如果字节是有符号的,像上面这样的表达式会更复杂。

    我不确定我是否真的认为现在设计的语言没有任何理由不包括比最长有符号整数类型短的所有类型的无符号版本,其语义是all integer(意思是离散数量的数字,默认情况下,将执行完全适合最大签名类型的操作(而不是任何特定类型) 好像 if (unsigned1 - unsigned2 > unsigned3) 即使在 unsigned2 unsigned1 [如果想要无符号环绕,就要显式指定 if ((Uint32)(unsigned1 - unsigned2) > unsigned3)