プログラミング言語 C 2.7
xのビット位置 pから nビットを反転する関数 invert(x, p, n)を書けと
いう問題。print_binaryというのは 2進数で表示する関数です。
#include <stdio.h> #include <assert.h> #include "util.h" static unsigned int invert(unsigned x, int p, int n); static void test_invert(void); int main (void) { int answer = 0; test_invert(); print_binary(0xffff); print_binary(invert(0xffff, 13, 5)); return 0; } static void test_invert() { assert(invert(0, 0, 1) == 1); assert(invert(1, 0, 1) == 0); assert(invert(0xff, 7, 8) == 0); assert(invert(0, 7, 8) == 0xff); assert(invert(0xffff, 15, 16) == 0); assert(invert(0, 15, 16) == 0xffff); assert(invert(51, 3, 2) == 0x3f); } static unsigned int invert(unsigned x, int p, int n) { unsigned int tmp; tmp = ~(~0 << n); tmp = tmp << (p + 1 - n); return x ^ tmp; }