练习 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);
}
如果程序设计有错误或更简洁的方法,欢迎并感谢您指正出示,谢谢!
相关文章
- SQLServer 错误 8642 查询处理器未能为执行并行查询启动必要的线程资源。 故障 处理 修复 支持远程
- oracle执行update语句时卡住问题分析及解决办法
- Linux bash:./xxx:无法执行二进制文件报错
- MySQL 如何批量执行多条SQL语句?(mysql执行多条语句)
- tableOracle执行计划表:一个指南(oracleplan)
- 执行利用Oracle实现高效的多语句执行(oracle多语句)
- 深入理解MySQL SQL语句的执行顺序(mysqlsql顺序)
- MySQL常用命令行指南:执行快速操作(mysql常用命令行)
- MySQL查看执行计划:优化你的查询效率(mysql查看执行计划)
- 使用merge同时执行insert和update操作
- 备份批处理工具实现MySQL数据库的备份(bat 执行mysql)
- 深入浅出查看Redis执行过程一步步(查看redis执行过程)
- 查询在命令行执行Oracle数据库查询(cmd中执行oracle)
- Oracle1一对多关系执行错误分析(oracle1对多报错)
- 在WINDOWS中设置计划任务执行PHP文件的方法