演習2-7 K&R プログラミング言語C
2009年12月22日
演習2-7
/* * x : 62 => 0011 1110 * p : 6 * n : 3 * * x反転 => 1100 0001 * mask => 0111 0000 * vmask => 1000 1111 * * x vmasked => 0000 1110 * x反転 masked => 0100 0000 * OR * => 0100 1110 => 78 */ #include <stdio.h> unsigned invert(unsigned x, int p, int n); int main(int argc, char *argv[]) { unsigned int x; int p, n; x = 62; /* 0011 1110 */ p = 6; n = 3; printf("x:%u\np:%d\nn:%d\nresult:%u\n", x, p, n, invert(x, p, n)); return 0; } unsigned invert(unsigned x, int p, int n) { /* m: マスク */ unsigned m, v; m = ~(~0 << n) << (p + 1 - n); /* 0111 0000 */ v = ~m; /* 1000 1111 */ return (x & v) | (~x & m); }
実行結果
$ ./ex2-7 x:62 p:6 n:3 result:78
プログラミング言語C 第2版 ANSI規格準拠
posted with amazlet at 09.11.27
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
共立出版
売り上げランキング: 9726