苟哥的笔记本
首页
文章归档
关于
文章归档
关于
首页
编程
正文
C程序设计语言第2版习题2-6
苟哥
2019-06-12 PM
1096℃
0条
###问题描述 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。 ###问题分解 1. 主函数main 2. 核心函数 setbits(x, p ,n, y), 此函数是算法核心,要做的事情就是通过一系列的位运算达到目的。大概分为以下几个步骤: - 假设x = X7X6X5X4X3X2X1X0, p = 4, n = 3, y = Y7Y6Y5Y4Y3Y2Y1Y0, 那么根据题意,我们期望得到的结果应该是 : X7X6X5Y2Y1Y0X1X0 - 分析 X7X6X5Y2Y1Y0X1X0 ,可以由 X7X6X5000X1X0 | 000 Y2Y1Y0 00 得到,因此我们接下来要想办法求得 X7X6X5000X1X0 和 000 Y2Y1Y0 00 - 求 X7X6X5 000 X1X0 : x & (~(~(~0 << n) << (p - n + 1))) - 求 000 Y2Y1Y0 00 : (y & ~(~0 << n)) << (p - n + 1) - 所以结果为 (x & (~(~(~0 << n) << (p - n + 1)))) | ((y & ~(~0 << n)) << (p - n + 1)) ###代码实现 ```c #include
unsigned setbits(unsigned x, int p, int n, unsigned y); int main() { unsigned x, y, r; int p, n; x = 21; y = 9; p = 4; n = 3; r = setbits(x, p, n, y); 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)); } ```
标签:
C程序设计语言
,
算法
,
C语言
,
习题2-6
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
http://www.i366211.com/archives/20/
上一篇
C程序设计语言第2版习题2-7
下一篇
C程序设计语言第2版习题2-8
取消回复
评论啦~
提交评论
栏目分类
软件安装
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引擎
机器人框架
京东捡漏