在“for”循环中运行整个“unsigned char”范围
Posted
技术标签:
【中文标题】在“for”循环中运行整个“unsigned char”范围【英文标题】:Running through entire range of `unsigned char` in `for` loop 【发布时间】:2014-01-08 03:22:26 【问题描述】:我想在for
循环中遍历unsigned char
的整个范围。假设我想打印从 0 到 255 的所有数字,我应该如何实现呢?
以下代码将是一个无限循环:
for (unsigned char i=0; i<=255; i++)
cout << i << endl;
这个漏掉0还是255,看是i++
还是++i
for (unsigned char i=0; ++i<=255; i++)
cout << i << endl;
我可以在 for
循环之前/之后放置一个 cout 来弥补丢失的条目,但我寻求更优雅的解决方案。
任何帮助将不胜感激! (也欢迎while
和do-while
循环!)
【问题讨论】:
你想要 C 答案还是 C++ 答案? 可能是 C++,流 I/O 是什么。 只需使用int
,然后投射即可。
@FredLarson 两者都可以。
@BlackAdder 怎么不优雅?
【参考方案1】:
试试,
unsigned char i = 0 ;
do
cout << i << endl ;
while ( ++i ) ;
do .. while
相对于其他形式的好处是您可以在测试条件之前免费运行一次。出于这个原因,这是一个重要的工具(如果只是不经常使用的话),在程序员的工具箱中。
【讨论】:
因为当i
是255
那么++i
会溢出回0,不是吗?
这也是我用汇编语言编写它的方式。
谢谢@woolstar,这个答案很漂亮。我现在开始喜欢编程了,不用感谢这个 gem。
@AlexisWilke 希望这与该程序集非常接近。
@BlackAdder,不过要小心。此行为仅对无符号整数类型进行了明确定义。对不起,如果那又毁了它。【参考方案2】:
使用boost::irange 可以被认为是优雅的(live example):
#include <boost/range/irange.hpp>
#include <iostream>
int main()
for(auto i : boost::irange(0, 256) )
std::cout << i << "\n";
return 0;
【讨论】:
【参考方案3】:你可以拆散它:
for (unsigned char i = 0; i < 16; ++i)
unsigned char base=i*16;
for (unsigned char j = 0; j < 16; ++j)
unsigned char val=base+j;
std::cout << val << std::endl;
【讨论】:
以上是关于在“for”循环中运行整个“unsigned char”范围的主要内容,如果未能解决你的问题,请参考以下文章