为什么我们在for循环中使用有符号整数?

时间:2016-10-06 13:53:02

标签: c for-loop integer unsigned

指数始终是非负的,因此我尽可能使用size_t。为什么使用有符号整数呢?它背后的基本原理是什么?

3 个答案:

答案 0 :(得分:3)

我认为这主要是由于几个原因共同作用的结果:

  • 历史,我认为int基本上被认为是当天的“机器词”(可能仍然是许多人)。所以它是一种“默认类型”,你没有进一步思考就使用它。
  • 许多循环很短,所以无符号类型给出的更好的精度并不重要,这使得人们不会考虑使用无符号类型。
  • 易于打字,intunsigned或(unsigned int)好得多。
  • 许多人根本没有意识到无符号类型对于迭代有多大的意义,或者(恐怖)不关心。

答案 1 :(得分:1)

如果你的意思是

for(int i=0; i<n; i++)

然后没有理由。邋,懒惰的程序员编写邋code的代码,就这么简单。

除非使用负数,否则类型应该是一些合适的无符号类型。如果迭代器用于索引数组,则size_t。否则uint_fastn_t,其中&#34; n&#34;应该足够大以包含迭代的所有值。

答案 2 :(得分:0)

无符号类型在0处有一个主要的不连续性,对于某些循环使用签名类型(如向下运行索引),程序员更安全。我们经常看到这个:

for (int i = n - 1; i >= 0; i--) {
    ...
}

在上面的循环中使用无符号类型失败。有一些方法可以用无符号类型编写这样的循环,但是许多程序员会发现它不那么直观:

for (unsigned i = n; i-- > 0; ) {
    ...
}

此外,索引不一定是无符号的:负指数可以与C指针一起使用,并且编写一些算法来利用这一点。

广泛使用int的原因是历史:size_t是在游戏后期引入的,最近才变得大于unsigned,除了一些较旧的异域系统。 / p>