如何编写循环生成0x0到0xffffffff的所有32位无符号整数?
遍历32位无符号整数全输入的正确循环写法
你的思路其实没大问题,但现有代码有个容易踩的小坑:当start递增到0xffffffff时,start < 0xffffffff的条件会不成立,导致这个最大的合法输入被漏掉,没法进入循环体处理。
先给你吃个定心丸:对于unsigned int类型来说,直接加1(不管是start++、start +=1还是你写的start += 0b1)完全没问题——无符号整数的溢出是定义好的行为,当数值到0xffffffff后再加1,会自动回绕到0x0,不会出现未定义行为,放心用就行。
下面给你两种靠谱的写法,都能覆盖从0x0到0xffffffff的所有32位无符号整数:
写法一:do-while循环(最推荐)
这种写法会先执行一次循环体再判断条件,完美解决最后一个值被漏掉的问题:
unsigned int start = 0x0; do { // 在这里写你的测试逻辑,比如把start传入待测试的函数 // do stuff with start start++; // 和你写的start += 0b1效果完全一样,选顺手的写法就行 } while (start != 0x0);
当start从0xffffffff加1后变成0x0,循环条件不满足,刚好退出,所有2^32个值都被处理到了。
写法二:带终止判断的while循环
如果更习惯while的写法,也可以这样写:
unsigned int start = 0x0; while (1) { // do stuff with start if (start == 0xffffffff) { // 处理完最后一个值就退出 break; } start++; }
额外提醒
遍历42亿次循环是个非常大的工作量,如果你的测试逻辑有一定耗时,这个循环可能会跑很久(甚至几天),建议先拿小范围的数值(比如从0到1000)测试逻辑是否正确,再考虑全量遍历哦。
内容的提问来源于stack exchange,提问作者jawedeater435
相关产品推荐
相关产品推荐

