苟哥的笔记本
首页
文章归档
关于
文章归档
关于
首页
编程
正文
C程序设计语言第2版习题2-8
苟哥
2019-06-12 PM
1121℃
0条
#### 问题描述 编写一个函数rightrot(x, n),该函数返回将x循环右移n位所得到的值。 这个问题的理解是: 将x进行右移n位,每次移动都将右侧的最后一位移到左侧第一位。 ------ #### 问题分解 - 主函数main - 核心函数 rightrot(x, n)。 这道题需要我们留心观察右移的规律,首先常规的右移很好表示,因此难点在如何表示右侧的最后一位移到左侧的第一位。通过分析,我们可以知道需要判断x的最右端位是1还是0,是1就进行特殊运算,若是0 ,直接右移即可。算法描述可以为: - 1. 当x的最后一位为0, 则只要进行常规的右移1位即可,即x >> 1 2. 当x的最后一位为1,则移动后 x的左侧第一位变为1,其他位进行正常右移,即 (x >> 1) | ~(~0 >> 1) 3. 按照i、ii执行n步即可 ------ #### 代码实现 ```c #include
unsigned rightrot(unsigned x, int n); int main() { int n; unsigned x, r; n = 1; x = 74; r = rightrot(x, n); printf("The result is: %u \n", r); return 0; } unsigned rightrot(unsigned x, int n) { while (n-- > 0) { if ((x & 1) == 1) //如果最右端位为 1 x = (x >> 1) | ~(~0 >> 1); else x = (x >> 1); } return x; } ```
标签:
C程序设计语言
,
算法
,
C语言
,
习题2-8
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
http://www.i366211.com/archives/44/
上一篇
C程序设计语言第2版习题2-6
下一篇
C程序设计语言第2版习题2-9
取消回复
评论啦~
提交评论
栏目分类
软件安装
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引擎
机器人框架
京东捡漏