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を取得し続けます。