为什么while循环中的这个语句从未执行过?

时间:2013-02-27 23:47:43

标签: c

我已经编写了一些代码来对齐char字节中的所有位。 但是,应用程序陷入循环,因为它永远不会执行行positionmask<<1;

为什么会这样?

void rjustify(char thisChar)
{
    unsigned char c = thisChar;
    unsigned char positionmask = 1;
    unsigned char insertionmask = 1;
    while(positionmask)
    {
            if(c & positionmask)
            {
                    c^=positionmask;
                    c|=insertionmask;
                    insertionmask<<=1;
            }
            positionmask<<1; //This line is never executed.
    }
    printf("%c", &c);
}

3 个答案:

答案 0 :(得分:4)

执行该行时,它无效。打开编译器警告并将其更改为:

   positionmask <<= 1;

答案 1 :(得分:3)

您需要这样做:positionmask <<= 1;而不是!

编译器永远不会生成错误的代码。除非生成编译器的编译器有bug。

答案 2 :(得分:2)

它被执行,它是一个noop

positionmask&lt;&lt; = 1;

自我注意:不要急于发表评论,它会制造垃圾邮件。