C++ 一个无符号字符循环将运行多少次
我是C/C++的noob,所以请原谅这个问题的简单性,但这里是C++ 一个无符号字符循环将运行多少次,c++,c,for-loop,C++,C,For Loop,我是C/C++的noob,所以请原谅这个问题的简单性,但这里是 unsigned char i; for (i=0; i<1000; ++i) if ((i%4) == 0) printf("hello\n"); 无符号字符i; 对于(i=0;i我敦促您通过运行代码来进行一个实验。如果这还不能解决问题,请尝试打印出条件为真的i的值。如果您随后注意到i的值如何变化的任何异常,请考虑可能的原因。注意:我假设为8位char类型 当对i执行等于255的++i时,将溢出。此时,语言标准
unsigned char i;
for (i=0; i<1000; ++i)
if ((i%4) == 0)
printf("hello\n");
无符号字符i;
对于(i=0;i我敦促您通过运行代码来进行一个实验。如果这还不能解决问题,请尝试打印出条件为真的i
的值。如果您随后注意到i
的值如何变化的任何异常,请考虑可能的原因。注意:我假设为8位char类型
当对i
执行等于255的++i
时,将溢出。此时,语言标准规定i
变为0,这是一种通常称为环绕的现象
所以,您有一个无限循环,因为答案是无限时间,无符号字符的范围在0-255(1字节)之间,当超过255时,它将溢出并返回到0,这意味着它永远不会达到1000。因此无限循环我说0-它不是“你好”,而是“你好”:
但现在在real中:i
的值为0、1、2、…999。这是1000个值
何时打印字符串?如果i
为0、4、8、12,…-则每4个循环周期打印一次
-->在1000个循环中,它被打印250次
如果数据类型不使用无符号字符
,则为真。无限时间“hello”打印因为原因很简单,无符号字符的上限是255,之后如果你再增加它,它们将变为零&再次达到255,然后变为零,所以变量i永远不会达到1000,我们称之为无限循环。这里你将“i”清除为无符号字符,其范围小于1000,大小为1字节(0-255)当它再次达到255时,它会递减,然后在任何情况下,该值都不会超过1000 bcoz“i”,范围仅为0-255
因此for循环不会失败,n将不确定地执行
我希望你明白我的意思了……!!!!!!!!!!!无限,不是吗?字符的一般范围只有256,所以总是<1000。代码甚至不会编译,更不用说打印任何东西了。显示的代码片段中有4个(
和3个)
。请阅读更多关于无符号字符的信息:-1以补偿错误答案的错误投票;-)溢出无符号字符
并不是未定义的行为,但在其他方面答案是正确的。如果UCHAR\u MAX
等于INT\u MAX
,我想你会得到UB,但那将是一些奇怪的实现。哈!你需要投5次反对票来补偿我的反对票:P@Steve很抱歉行为的标准定义是什么?“我也可以学到一些东西。”戴维:在C++和C中,将一个超出范围的值转换为一个无符号类型会导致值Mudio uWuViFuxMax + 1。在这种情况下,如果无符号字符为8位,则模256。那么UB的可能性很小,如果i+1
被提升到int
并在它有机会被模块化回无符号字符范围之前溢出@David:我假设没有证据表明这是从时间的黎明开始考虑的硬件问题——或者是某台机器捕捉到了越界的有符号算术,但没有无符号,或与符号大小表示有关(其中,INT\u MAX+1
的溢出有符号值不能用模2*(INT\u MAX+1)
表示)。公认的答案明确说明了假设是关于8位字符的。