何时在签名变量上使用无符号变量是否合适?怎么样在一个for循环?
我听到很多关于此的意见,我想看看是否有任何类似的共识.
for (unsigned int i = 0; i < someThing.length(); i++) {
SomeThing var = someThing.at(i);
// You get the idea.
}
Run Code Online (Sandbox Code Playgroud)
我知道Java没有无符号值,这一定是Sun Microsystems的一个有说服力的决定.
我总是使用unsigned int来表示永远不应该是负数的值.但是今天我在代码中发现了这种情况:
void CreateRequestHeader( unsigned bitsAvailable, unsigned mandatoryDataSize,
unsigned optionalDataSize )
{
If ( bitsAvailable – mandatoryDataSize >= optionalDataSize ) {
// Optional data fits, so add it to the header.
}
// BUG! The above includes the optional part even if
// mandatoryDataSize > bitsAvailable.
}
Run Code Online (Sandbox Code Playgroud)
我应该开始使用int而不是unsigned int来表示数字,即使它们不能为负数吗?
当用类C语言编程时,一个人的"默认"整数类型是int还是uint/unsigned int?默认情况下,我的意思是当你不需要负数时,但任何一个都应该足够大,足以容纳你所持有的数据.我可以为两者考虑好的论点:
签名:数学上表现更好,如果你试图在一些你没想到的边界情况下低于零,那么奇怪行为的可能性就会降低,通常可以更好地避免奇怪的角落情况.
unsigned:为溢出提供一点额外的保证,以防你对值的假设是错误的.作为文档,变量表示的值永远不应为负数.