C程序设计语言第二版习题2-8

简介: 问题描述编写一个函数rightrot(x, n),该函数返回将x循环右移n位所得到的值。

问题描述

编写一个函数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步即可

代码实现

#include<stdio.h>

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;
}
目录
相关文章
|
算法 搜索推荐 Python
用N-S流程图表示算法
用N-S流程图表示算法
1846 2
|
C语言 芯片
【嵌入式系统】存储器映射与寄存器映射原理
【嵌入式系统】存储器映射与寄存器映射原理
926 0
【嵌入式系统】存储器映射与寄存器映射原理
联通骨干网线路介绍
中国联通作为中国主要的基础电信运营商之一,其骨干网从1994年成立起经历了多次演进。最初建设的联通B网(UNINET)主要用于2G/3G移动业务;1999年出现的169网(China169),由邮电部基于CNCNET与中国电信部分骨干网合并而成,后被新联通接管,成为普通网民的重要选择;同年成立的中国网通公用互联网(CNCNET),即后来的联通A网(CUII),专注于高速稳定的国际国内互联及大客户专线服务。目前,联通形成了“China169+CUII”的双网格局,标志着其网络向现代化、智能化和全球化迈进。
1727 0
联通骨干网线路介绍
|
Web App开发 Rust 前端开发
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri App开启远程调试功能
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri App开启远程调试功能
1721 0
|
编译器 C语言
【C语言】extern 关键字详解
`extern` 关键字在C语言中用于跨文件共享变量和函数的声明。它允许你在一个文件中声明变量或函数,而在其他文件中定义和使用它们。理解 `extern` 的使用可以帮助你组织和管理大型项目的代码。
1523 3
|
存储 编译器 程序员
【C语言】auto 关键字详解
`auto` 关键字用于声明局部变量的自动存储类,其作用主要体现在变量的生命周期上。尽管现代C语言中 `auto` 的使用较少,理解其历史背景和作用对于掌握C语言的存储类及变量管理仍然很重要。局部变量默认即为 `auto` 类型,因此在实际编程中,通常不需要显式声明 `auto`。了解 `auto` 关键字有助于更好地理解C语言的存储类及其在不同场景中的应用。
1076 1
|
人工智能 前端开发 API
基于agentscope的多智能体游戏场景-骗子酒馆
骗子酒馆是一款基于多智能体系统的在线社交推理游戏,玩家通过掷骰子和扑克牌进行智力和心理博弈,结合大语言模型技术,每个游戏角色由AI扮演,具备独特的性格和决策逻辑,提供高度沉浸式的体验。游戏采用黑板通信模式,确保信息高效交换,支持多种角色如胆小鬼、占卜师等,每个角色拥有特定的技能和行为模式,增强游戏的策略深度和互动性。游戏界面简洁,操作流畅,适合喜欢心理战和策略游戏的玩家。文章末尾有源码和体验地址。
3107 13
|
存储 编译器 程序员
【C语言】内存布局大揭秘 ! -《堆、栈和你从未听说过的内存角落》
在C语言中,内存布局是程序运行时非常重要的概念。内存布局直接影响程序的性能、稳定性和安全性。理解C程序的内存布局,有助于编写更高效和可靠的代码。本文将详细介绍C程序的内存布局,包括代码段、数据段、堆、栈等部分,并提供相关的示例和应用。
1033 5
【C语言】内存布局大揭秘 ! -《堆、栈和你从未听说过的内存角落》
|
C语言 开发者
C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧
本文深入探讨了C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧,并通过案例分析展示了其应用,展望了未来的发展趋势,旨在帮助读者提升程序质量和开发效率。
1034 5
|
存储 自然语言处理 Unix
【C语言】C语言 4 个编译过程详解
编译是将源代码转换为目标代码的过程。它是在编译器的帮助下完成的。编译器检查源代码是否存在语法或结构错误,如果源代码没有错误,则生成目标代码。
965 1

热门文章

最新文章