1

unsigned invert(unsigned x, int p, int n) 位置pで始まるnビットを反転してxを返し、他のビットは変更しないC関数を実装しています。

#include <stdio.h>

unsigned invert(unsigned x, int p, int n);

int main()
{
    printf("%u\n", invert(11111111, 5, 4));
    printf("%u\n", invert(10, 2, 2));

    return 0;
}

unsigned invert(unsigned x, int p, int n)
{   
    return x^(~(~0<<n)<<p+1-n);
}

これは私がこれまでに得たものであり、関数をトレースしている場合は正しいはずですが、最初のテストで11111163、2番目のテストで12を取得し続けます。

4

1 に答える 1

2

あなたのプログラムは機能していると思います。あなたがしなければならない唯一のことは、数値を2進数で表現することです。

unsigned invert(unsigned x, int p, int n); 

int main()
{
    printf("%x\n", invert(0b11111111, 5, 4));
    printf("%x\n", invert(0b10, 2, 2));

return 0;

}

unsigned invert(unsigned x, int p, int n)

{   
     return x^(~(~0<<n)<<p+1-n);
}

これは、あなたの望むことですか?

于 2012-09-17T13:20:06.360 に答える