>>其实呢?

这个问题在这里已经有了答案:

  • 什么是C ++中的“ - >”运算符? 21个答案

  • while(x - >> 0)// x运行到0

    这实际上是-- (后递减)和>> (右移位)运算符的混合体,格式更好:

    while (x-- >> 0)
    

    对于这个特定的用法,在右边为0时,由于后缀-- ,每次循环迭代x递减,并且先前(递减前)值被>> 0右移0位,其根本不执行任何操作当x不是负数时。

    x是1时,后减量将其减小到0,并且移位的结果值为0,这将导致循环终止。

    更一般地说,如果您尝试使用>>作为负值(例如x从0开始或负值大于INT_MIN ,因此x--产生负值),结果是实现定义的 ,这意味着您必须咨询您的编译器文档。 你可以使用你的编译器文档来推断它在循环中的表现。

    标准的相关部分:5.8 / 3:

    E1 >> E2的值是E1右移E2位的位置。 如果E1具有无符号类型或者E1具有带符号类型和非负值,则结果的值是E1/2^E2的商的整数部分。 如果E1有签名类型和负值,则结果值是实现定义的。

    顺便说一句 - 对于Visual Studio,根据http://msdn.microsoft.com/en-us/library/336xbhcz.aspx,实现定义的行为是“如果additive-expression为0,则不执行移位操作”。 我在GCC手册中找不到任何关于此的内容(这里预计会发生这种情况)。


    while( x -->> 0 ) // x runs to 0
    

    不,“去操作员”是-->只有一个>符号。 它将x减1,然后将结果与零比较。

    -- >> 0 “运行到运算符”减小x ,然后将结果右移0。 由零移位对于非负x不做任何事情,否则它是实现定义的(通常什么都不做,但可能是随机的)。 被零移位的零为零,将其解释为false ,此时该循环将终止。

    所以它“起作用”,但它是表达循环的可怕方式。


    - 递减,但在递减之前返回变量的值,>>右移右边的操作数,即0(也称为非操作数),然后隐式地将结果与0进行比较。

    链接地址: http://www.djcxy.com/p/1973.html

    上一篇: >> actually do?

    下一篇: > means in Java?