2

私はCで単純な関数を書いています。これは、バイト単位で(ビットごとに)「1」の数を返します。これが私のコードです、コンパイラは次のように伝えます:「for」が始まる行の「「=トークン」の前に式が必要です。

#include <stdio.h>
#include <stdlib.h>

int return_num_of_1(unsigned char u);

int main()
{
    printf("Hello world!\n");
    return 0;
    return_num_of_1(1);
}


int return_num_of_1(unsigned char u)
{

    int counter;

    for (counter = 0; u; u << = 1)
    {
        if(u & 1) counter++;
    }

    return counter;
}
4

2 に答える 2

2
    for (counter = 0; u; u << = 1)

コンパイルの問題はここにあります。演算子 <<= をスペースなしで使用する必要があります。間にスペースを入れると、コンパイラはそれを '<<' と '=' の 2 つの別個の演算子として読み取ります。

他にもいくつかの問題があり、スペースを削除するとコンパイルが修正されます。

于 2013-10-14T16:06:17.987 に答える
1

ビットシフト左代入演算子を使用する場合は、= の前のスペースが間違っています。

for (counter = 0; u; u << = 1)する必要がありますfor (counter = 0; u; u <<= 1)

于 2013-10-14T16:04:31.990 に答える