位置 pから始まる nビットに yの右端の nビットをセットして、他は
ビットはそのままにした xを返す setbits(x, p, n, y)を書け、という問題。
何か問題の日本語おかしい気がするのは、僕の語彙力の問題なんですかね〜?
#include <stdio.h> #include <stdlib.h> #include <assert.h> static unsigned int setbits(unsigned int x, int p, int n, unsigned int y); static void test_setbits(); int main(void) { unsigned int answer; test_setbits(); answer = setbits(12, 1, 2, 3); printf("answer is %d\n", answer); return 0; } static void test_setbits() { assert(setbits(0, 0, 1, 1) == 1); assert(setbits(1, 0, 1, 0) == 1); assert(setbits(240, 3, 4, 15) == 255); assert(setbits(195, 5, 4, 15) == 255); } static unsigned int setbits(unsigned int x, int p, int n, unsigned int y) { unsigned int mask_x; unsigned int mask_y; unsigned int tmp; tmp = (x >> (p + 1 - n)) & ~(~0 << n); tmp = tmp << (p + 1 - n); x = x ^ tmp; mask_y = ~(~0 << n); mask_x = (mask_y) << (p + 1- n); return x | mask_x; }