首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为无符号值遍历从N到0的所有值

为无符号值遍历从N到0的所有值
EN

Stack Overflow用户
提问于 2011-12-09 12:26:01
回答 4查看 108关注 0票数 1

我有这段代码,它可以很好地处理常规的有符号整数,我正在尝试编写一个与size_t工作的等效版本(因为现在开始和计数都是int,我需要它们是size_t):

代码语言:javascript
复制
int count,start;
for (start = (count-2)/2; start >=0; start--)
{
     someFunction( x, start, count); // x is to illustrate function has other parameters
}

我觉得这段代码对于一个非常简单的解决方案来说已经足够简单了,但我却一片空白。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-09 12:28:40

你可以像这样重写它:

代码语言:javascript
复制
start = count/2;
while (start > 0){
    start--;
    someFunction( x, start, count);
}

否则,我能想到的唯一其他选择就是在已签名和未签名之间进行一些非标准兼容的转换……或者对~(size_t)0做些什么..。

以下是一些非标准兼容的替代方案:

代码语言:javascript
复制
for (start = (count-2)/2; (ssize_t)start >= 0; start--)
{
     someFunction( x, start, count);
}

for (start = (count-2)/2; start != ~(size_t)0; start--)
{
     someFunction( x, start, count);
}
票数 3
EN

Stack Overflow用户

发布于 2011-12-09 18:33:55

代码语言:javascript
复制
size_t cnt, start;
for (start = cnt/2; start-- > 0; ) { ... }

  • if cnt=0 : start将从零开始,循环代码永远不会执行;循环结束后,start将为(Size_t)-1\f25
  • if cnt=1 : same
  • if cnt >=2 :循环代码将至少执行一次;第一次迭代,start为(cnt/2)-1;最后一次迭代start为0;循环结束后start为(Size_t)-1\f25

编辑如果OP真的想为cnt=1循环一次,那么三元是必要的:

代码语言:javascript
复制
for (start = (cnt==1) ? 1 : cnt/2; start-- > 0; ) { ... }
票数 1
EN

Stack Overflow用户

发布于 2011-12-09 13:35:51

如果只使用一个减去一的值呢?

代码语言:javascript
复制
size_t start_plus_one;
for (start_plus_one = (count-2)/2+1; start_plus_one >=1; start_plus_one--)
{
     someFunction( x, start_plus_one-1, count); // x is to illustrate function has other parameters
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8441054

复制
相关文章

相似问题

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