0

次のように、KeilC51を使用して8051の割り込みルーチンを作成しました。

void intrupt1(void) interrupt 2        // ext interrupt 1 vector
{   
    char i,j,prime;
    P2 = 0;
    for(i=2;i<128;i++)
    {
        prime = 1;
        for(j=2;j<i;j++)
        {
            if(i%j==0)
                prime = 0;
        }
        if(prime == 1)
        {
            P2 = i;
            delay2();
        }
    }
    P2 = 0;
}

シミュレートしようとすると、128までは正しい素数が表示され、その後8ビットカウンターになり、その後素数が表示されます。つまり、127(最後に予想される素数)の後、出力は128,129,130​​でした。 ... 255、127,128,129までの素数...。

また、4ビットカウンターである外部割り込み0のルーチンも作成しました(正しく機能します)が、上記には影響しないと思います。

4

1 に答える 1

2

ほとんどの場合char、コンパイラで符号付きであり(C標準ではchar符号付きまたは符号なしのいずれかが可能)、範囲は-128〜127です。この範囲の値は128未満です。したがって、ループ条件は常にtrueであり、ループは常にtrueです。したがって、無限です。

于 2011-11-16T06:03:55.930 に答える