課題
位置pから始まるnビットをyの右端のnビットにセットし、他のビットはそのままにしたxを返す関数setbits(x, p, n, y)を書け。
回答
#include <stdio.h> unsigned setbits(unsigned x, int p, int n, unsigned y); /* * @fn Main * @brief * @param * @return * @note */ int main(void) { int tmp = setbits(65535, 4, 3, 0); printf("%d\n", tmp); } /* * @fn setbits * @brief xの位置pから始まるnビットをyの右端のnビットにセットし、他のビットはそのままにしたxを返す * @param x * @return * @note */ unsigned setbits(unsigned x, int p, int n, unsigned y) { // xの位置pから始まるnビットの抽出 int tmp = (x >> (p + 1 - n)) & (~(~0 << n)); // yの右端のnビットにセットし、他のビットはそのままにしたxを求める x = (y & (~0 << n)) + tmp; return x; }
実行結果
7