The C Programming Language練習問題2-7


テーマは1つの関数invert(x,p,n)を編纂して、この関数はxに対して以下の操作を実行した後の結果値を返します:xの中でp位から始まるn個(バイナリ)の位を逆(つまり、1は0になって、0は1になります)、xの残りの各位は変わらないでください.
テーマ解析はp位から左に操作すると仮定する.
コード実装
#include 

unsigned inverttemp(unsigned x, int p, int n);

int main()
{
    int a;
    a = 235;
    printf("%d
"
, inverttemp(a, 4, 3)); } unsigned inverttemp(unsigned x, int p, int n) { int i, j, m; i = (x >> p) & ~(~0 << n); printf("i=%d
"
, i); i = (~i) & ~(~0 << n); x = (x & ~(~0 << p)) | ((((x >> (p + n)) << n) | i) << p); printf("i=%d
"
, x); return x; }