苟哥的笔记本
首页
文章归档
关于
文章归档
关于
首页
编程
正文
C程序设计语言第2版习题2-7
苟哥
2019-06-12 AM
1079℃
0条
#### 问题描述 编写一个函数 invert(x, p, n),该函数返回对 x 执行下列操作后的结果值:将 x 中从第 p 位开始的 n 个(二进制)位求反(即,1 变成 0,0 变成 1),x 的其余各位保持不变。 ------ #### 问题分解 - 主函数main - 工具函数 setbits(x,p,n,y), 算法解析可以看上一篇文章 - 核心函数 invert(x, p ,n)。 这道题其实不难,只要联想一下2-6解决的问题,即可快速得到答案。我们来回顾一下2-6解决的问题:编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。 可以发现,我们只要拿到一个y,满足y的最右边的n位的值正是 x 中需要求反的位即可。因此算法描述可以为: - 1. 求得x的指定位求反并右移至尾部: (~x >> (p - n + 1)) & ~(~0 << n) 2. 调用setbits 即可求得 ------ #### 代码实现 ```c #include
unsigned setbits(unsigned x, int p, int n, unsigned y); unsigned invert(unsigned x, int p, int n); int main() { unsigned x, r; int p, n; x = 21; p = 4; n = 3; r = invert(x, p, n); printf("The result is: %u \n", r); return 0; } unsigned setbits(unsigned x, int p, int n, unsigned y) { return (x & (~(~(~0 << n) << (p - n + 1)))) | ((y & ~(~0 << n)) << (p - n + 1)); } unsigned invert(unsigned x, int p, int n) { unsigned y; y = (~x >> (p - n + 1)) & ~(~0 << n); return setbits(x, p, n, y); } ```
标签:
C程序设计语言
,
算法
,
C语言
,
习题2-7
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
http://www.i366211.com/archives/43/
上一篇
C程序设计语言第2版习题2-4
下一篇
C程序设计语言第2版习题2-6
取消回复
评论啦~
提交评论
栏目分类
软件安装
10
开发工具
8
算法
2
测试
1
架构
3
填坑记
2
开源
6
科普
6
私域
2
读书笔记
4
编程
48
运营
3
管理
1
标签云
算法
C程序设计语言
C语言
Java
mysql
PHP
ffmpeg
golang
VueJs
脚手架
VueJs实战项目
Intellij IDEA
Centos7
Hyperf
抖音运营
杰克韦尔奇
跌荡一百年
生成海量测试数据
企业管理
习题2-3
习题2-4
习题2-6
异常分类
File
习题2-7
习题2-8
习题2-9
习题3-3
习题3-4
习题3-5
友情链接
申请
SaaS引擎
机器人框架
京东捡漏