c/c++语言开发共享理解for循环的退出条件

读完这个post后我有了这个问题用C语言打印二进制表示forms的int

在用户注释中,他们发布了for循环,它为位位置分配1或0,以便从int decimal转换为char * binary。

for(; bits--; u >>= 1) str[bits] = u & 1 ? '1' : '0'; 

我理解为什么不需要初始值。 这是我一直都知道的for循环的语法:

 for ( variable initialization; condition; variable update ) 

我不明白的是’bit–‘如何成为退出条件。 请帮助我理解这段代码是如何工作的(我测试了它,它是有效的)。

谢谢。

    在C中,零值在布尔上下文中计算为“false”。 因此,当bits--计算为0 ,在循环的上下文中,它计算为“false”并终止循环。

    如果你说,例如:

     int x = 1; if (--x) { printf("True!n"); } else { printf("False!n"); } 

    它将输出“False”,因为--x计算结果为0,在布尔上下文中为“false”。

    所有条件基本上归结为检查是否为0。 0表示false ,其他一切表示true 。 因此,当bits为0时,循环将中断。

    您有时会看到写入条件的while或条件

     if (variable) // or while(variable) 

    这只是简写

     if (variable != 0) // or while (variable != 0) 

    所以

     for (; bits--; u >>= 1) 

    是的缩写

     for (; bits-- != 0; u >>= 1) 

    bits–是int类型的赋值表达式(因为它将返回b的值,即int)。 为了匹配for循环语法,它被转换为布尔表达式,这意味着如果bits!= 0则为真。实际上,条件与bits!= 0相同,但是通过使用bits–,它会更改值同时使用位,使代码更紧凑,就是这样。

    正如其他人所说,在C中,你可以使用整数作为条件 – 0或false ,其他任何东西true 。 (实际上,你几乎总是这样做 – 甚至像a是一个int这样的表达式)

    因此,当bits--为0时,循环结束。

    --运算符在变量之后,它会减少变量,并获得它的先前值。 例如,如果你有int a=3,b; b=a--; int a=3,b; b=a--; ,那么b将是3,a将是2。

    因此,循环将在该位从0减少到-1之后退出。 这意味着,如果在开头, bits==8 (例如),循环将迭代8次,当在第一个时,比特将是7(因为条件已经检查),并且在最后,比特将是0.循环数组的好方法(因为在c中, bits变量数组的索引从0 bits-1 )。

      以上就是c/c++开发分享理解for循环的退出条件相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/545677.html

      (0)
      上一篇 2021年1月10日
      下一篇 2021年1月10日

      精彩推荐