首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >默认int类型:有符号还是无符号?

默认int类型:有符号还是无符号?
EN

Stack Overflow用户
提问于 2009-10-12 15:13:23
回答 6查看 24.2K关注 0票数 19

在类C语言中编程时,“默认”整数类型应该是int还是uint/unsigned int?默认情况下,我的意思是当您不需要负数,但其中任何一个都应该很容易地足够大,以容纳您持有的数据。我可以为这两种情况想出很好的理由:

signed:在数学上表现更好,如果在一些你没有想到的边界情况下尝试低于零,则奇怪行为的可能性较小,通常可以更好地避免奇怪的边角情况。

unsigned:提供一点防止溢出的额外保证,以防您对值的假设是错误的。用作说明文件,说明变量表示的值应为为负数。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-10-12 15:19:52

Google C++ Style Guide对无符号整数有一个有趣的看法:

(引述如下:)

无符号整数上的

有些人,包括一些教科书作者,建议使用无符号类型来表示从不为负的数字。这是一种自我记录的形式。然而,在C中,这类文档的优势被它可能引入的真正错误所掩盖。考虑一下:

代码语言:javascript
复制
for (unsigned int i = foo.Length()-1; i >= 0; --i) ...

这段代码永远不会终止!有时,gcc会注意到这个bug并警告你,但通常不会。在比较有符号变量和无符号变量时,也会出现同样糟糕的错误。基本上,C的类型提升方案会导致无符号类型的行为与预期的不同。

因此,使用断言来记录变量是非负的。不要使用无符号类型。

(结束引用)

票数 16
EN

Stack Overflow用户

发布于 2009-10-12 15:39:54

作为一个粗略的经验法则,我使用无符号整数来计算事物,使用有符号整数来测量事物。

如果您发现自己从无符号整型中递减或减去,那么您应该处于这样的上下文中:您应该非常小心地避免下溢(例如,因为您在一些低级代码中从字符串的末尾逐步后退,所以当然您首先要确保字符串足够长以支持这一点)。如果你不在这样的上下文中,不能低于零是绝对重要的,那么你应该使用有符号的值。

在我的用法中,无符号整数是指那些绝对不能变成负数的值(或者对于你实际上想要模2^N算术的百万分之一的情况),而不是那些碰巧不是负数的值,在目前的实现中可能是这样。

票数 4
EN

Stack Overflow用户

发布于 2009-10-12 15:16:32

我倾向于使用有符号的,除非我知道我需要无符号的,因为int通常是有符号的,而且键入unsigned int需要更多的努力,而uint可能会让另一个程序员稍微停下来思考这些值可以是什么。

所以,我看不出缺省为unsigned有什么好处,因为正常的int是有符号的。

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

https://stackoverflow.com/questions/1555154

复制
相关文章

相似问题

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