Tuesday, September 12, 2006

无符号的整数好危险

最近经常会犯一些比较低级的错误,比如无符号的整数问题。如果一个变量不可能取负值我就习惯声明成无符号类型,比如说数组的下标。这样做主要是为了完全利用32位字长。但是也会构成些隐患。比如这个就不会循环:

for(size_t i=vectorCount;i>-1;--i)
{
...
}

而这个循环了很多遍,如果count为0的话:
for(size_t i=count-1;i>0;--i)
{
...
}

这个要经常注意了,很容易犯。

3 comments:

Unknown said...

为何是从vectorcount往下数呢?
for(size_t i=0; i<vectorCount; i++){
...
}
如何?

Unknown said...

-1应该在无符号整数中是0xFFFFFFFF,

billconan said...

原因是因为要删除列表内的元素
如果是正向数的话到最后数组会越界,但是倒着数不会