何时在签名值上使用无符号值?

问题描述 投票:79回答:6

什么时候在签名变量上使用无符号变量比较合适?在for循环中怎么样?

我听到了很多关于此的意见,我想看看是否有任何类似共识的内容。

for (unsigned int i = 0; i < someThing.length(); i++) {  
    SomeThing var = someThing.at(i);  
    // You get the idea.  
}

我知道Java没有无符号值,并且这在Sun Microsystems部分上必须是明智的决定。

language-agnostic types
6个回答
67
投票

[我很高兴找到关于这个主题的a good conversation,因为我之前没有真正考虑过。

总之,带符号是一个很好的常规选择-即使您不确定要确保所有数字都是正数-如果您要对变量进行算术运算(例如在典型的for循环情况下)。

如果您要进行掩码之类的按位操作,则无符号开始变得更有意义。或者,如果您迫切希望通过使用符号位来获得该额外的正范围。

个人而言,我喜欢签名,因为我不相信自己保持一致并避免将两种类型混合使用(如本文警告的那样。


9
投票

在上面的示例中,当'i'始终为正且范围更大将是有益的时,无符号将很有用。就像您使用“声明”语句一样,例如:

#declare BIT1 (unsigned int 1)
#declare BIT32 (unsigned int reallybignumber)

尤其是这些值永远不会改变的时候。

但是,如果您执行的会计程序中人们对自己的钱不负责任并且经常出现亏损,那么您肯定会希望使用“签名”。

我确实同意圣人的观点,尽管有一个很好的经验法则是使用带符号的,而C实际上是默认的,因此您很满意。


8
投票

C和C ++编译器在比较带符号和无符号类型时会生成警告;在您的示例代码中,您无法使循环变量无符号,并且使编译器在没有警告的情况下生成代码(假设已打开警告)。


8
投票

我认为,如果您的业务案例指示负数无效,那么您将想要


6
投票

size_t通常是一个不错的选择,如果您使用的是STL类,则选择size_type


0
投票

我建议使用unsign。更好

© www.soinside.com 2019 - 2024. All rights reserved.