演習2-6 K&R プログラミング言語C

演習2-6

問題文の日本語がちょっとわかりにくいが、以下のように動作する関数 setbits を作る。

setbits の動作図

#include <stdio.h>

unsigned setbits(unsigned x, int p, int n, unsigned y);

int main(int argc, char *argv[])
{
    unsigned int x, y;
    int p, n;

    x = 62; /* 0011 1110 */
    y = 12; /* 0000 1100 */
    p = 4;
    n = 3;

    printf("x:%u\ny:%u\np:%d\nn:%d\nresult:%u\n", x, y, p, n, setbits(x, p, n, y));

    return 0;
}

unsigned setbits(unsigned x, int p, int n, unsigned y)
{
    /* m : マスク */
    unsigned m;
    m = ~(~0 << n) << (p + 1 - n); /* 0001 1100 */
    return (x & ~m) | (y & m);
}

実行結果

$ ./ex2-6
x:62
y:12
p:4
n:3
result:46
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»