首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C/C++使用int或unsigned int

C/C++使用int或unsigned int
EN

Stack Overflow用户
提问于 2014-03-23 13:30:17
回答 5查看 24.6K关注 0票数 38

在许多代码示例、源代码、库等中,我看到了int的用法,据我所知,unsigned int会更有意义。

我经常在for循环中看到这种情况。如下例所示:

代码语言:javascript
复制
for(int i = 0; i < length; i++)
{
    // Do Stuff
}

您到底为什么要使用int而不是unsigned int?这仅仅是懒惰吗?人们不会为输入unsigned而烦恼

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-03-23 13:51:12

使用unsigned可能会引入难以发现的编程错误,通常最好使用带符号的int来避免这些错误。一个例子是当你决定向后迭代而不是向前迭代时,并编写以下代码:

代码语言:javascript
复制
for (unsigned i = 5; i >= 0; i--) {
    printf("%d\n", i);
}

另一种是如果你在循环中做一些数学运算:

代码语言:javascript
复制
for (unsigned i = 0; i < 10; i++) {
    for (unsigned j = 0; j < 10; j++) {
        if (i - j >= 4) printf("%d %d\n", i, j);
    }
}

使用unsigned会引入这些类型的bug的可能性,并且没有任何好处。

票数 33
EN

Stack Overflow用户

发布于 2014-03-23 13:56:49

这通常是懒惰或缺乏理解。

当值不应该是负数时,我总是使用unsigned int。这也符合文档的目的,即指定正确的值应该是什么。

IMHO,断言使用"int“比使用"unsigned int”更安全是完全错误的,也是一种糟糕的编程实践。

如果你使用过Ada或Pascal,你会习惯于使用更安全的做法,为数值指定特定的范围(例如,一个只能是1,2,3,4,5的整数)。

票数 17
EN

Stack Overflow用户

发布于 2014-03-23 13:46:01

如果length也是int,那么您应该使用相同的整数类型,否则当您在比较语句中混合有符号和无符号类型时,会发生奇怪的事情。大多数编译器都会给你一个警告。

你可以继续问,为什么要签署length?好吧,那可能是历史了。

此外,如果您决定反转循环,即

代码语言:javascript
复制
for(int i=length-1;i>=0 ;i--)
{
   // do stuff
}

如果使用无符号整数,逻辑就会中断。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22587451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档