9

通常已知值是积极的。例如 TCP/UDP 序列号总是正值。两者intunsigned int足够大,甚至可以存储最大的sequence number,所以我可以使用这些类型中的任何一种。当已知值为正时,还有许多其他示例。

unsigned当常规类型的容量signed足够(而且通常绰绰有余)时,是否有任何理由使用类型?

我个人倾向于使用常规类型,因为:

  • int可能比uintor更具可读性unsigned int
  • 我不需要包含额外的标题UINT等。
  • 我将避免在程序中的某个地方进行额外的演员表

unsigned我可以想象使用类型的原因:

  • 帮助编译器生成更好的代码?
  • 帮助其他程序员了解该变量是无符号的
  • 避免可能的错误(例如,当将 int 分配给 UINT 编译器时可能会产生编译时错误,我们应该检查我们分配的值是否为负)
4

1 回答 1

1

原因之一是比较有符号数和无符号数会导致令人惊讶的结果。在 C 和(我认为)C++ 中,比较有符号数和无符号数会导致有符号数被解释为无符号数。如果有符号值恰好是负数,则将其读取为无符号将给出比任何无符号数更大的值,这不是您想要的。有关Objective-C 中的示例,请参阅此问题,它使用与 C 相同的转换规则。

于 2013-04-24T09:49:26.743 回答