zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

执行二进制 函数 一个 操作 编写 开始 返回
2023-09-14 09:06:57 时间

C语言程序设计(第二版) 练习2-7 个人设计

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

代码块

方法1:

#include <stdio.h>
#include <stdlib.h>
unsigned invert(unsigned x, int p, int n);
int main()
{
    int a, b;
    a=21;
    b=invert(a, 4, 3);
    printf("%d\n", b);
    system("pause");
    return 0;
}
unsigned invert(unsigned x, int p, int n)
{
    int a, b, c, d, e;
    a=(x>>(p+1))<<(p+1);
    b=x-a;
    c=b>>(p+1-n);
    d=c<<(p+1-n);
    e=(~c&~(~0<<n))<<(p+1-n);
    x=a+e+(b-d);
    return x;
}   

方法2:

#include <stdio.h>
#include <stdlib.h>
int invert(int x, int p, int n);
int main()
{
	int a, b, c;
	printf("Please enter number: ");
	scanf("%d", &a);
	printf("Please enter bits: ");
	scanf("%d", &b);
	printf("Please enter move number: ");
	scanf("%d", &c);
	printf("Result=%d\n", invert(a, b, c));
	system("pause");
	return 0;
}
int invert(int x, int p, int n)
{
	return ((~(x>>(p+1-n))&~(~0<<n))<<(p+1-n))+(x>>(p+1-n)<<(p+1-n)^x);
}

如果程序设计有错误或更简洁的方法,欢迎并感谢您指正出示,谢谢!