The C Programming Language 练习题2-7

来源:互联网 发布:比特精灵软件下载 编辑:程序博客网 时间:2024/06/05 07:16

题目
编写一个函数 invert(x, p, n),该函数返回对x 执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位求反(即,1 变成0,0 变成1),x的其余各位保持不变。

题目分析
假设从第p位开始向左操作。

代码实现

#include <stdio.h>unsigned inverttemp(unsigned x, int p, int n);int main(){    int a;    a = 235;    printf("%d\n", inverttemp(a, 4, 3));}unsigned inverttemp(unsigned x, int p, int n){    int i, j, m;    i = (x >> p) & ~(~0 << n);    printf("i=%d\n", i);    i = (~i) & ~(~0 << n);    x = (x & ~(~0 << p)) | ((((x >> (p + n)) << n) | i) << p);    printf("i=%d\n", x);    return x;}
原创粉丝点击