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

简介: 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变

问题描述

编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。

问题分解

  • 主函数main
  • 核心函数 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))

代码实现

#include<stdio.h>
​
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));
}
目录
相关文章
|
存储 数据采集 NoSQL
收藏!一张图帮你快速建立大数据知识体系
对海量数据进行存储、计算、分析、挖掘处理需要依赖一系列的大数据技术,而大数据技术又涉及了分布式计算、高并发处理、高可用处理、集群、实时性计算等,可以说是汇集了当前 IT 领域热门流行的 IT 技术。本文对大数据技术知识体系进行划分,共分为基础技术、数据采集、数据传输、数据组织集成、数据应用、数据治理,进行相关的阐述说明,并列出目前业界主流的相关框架、系统、数据库、工具等。(文末福利:下载大数据知识体系图)
18672 3
收藏!一张图帮你快速建立大数据知识体系
|
9月前
|
数据采集 人工智能 监控
AI也能“专业进修”?不用写代码,教你用微调打造行业专属模型
本文深入浅出解析AI微调(Fine-tuning)技术,聚焦如何让通用大模型成长为行业专才。详解LoRA等高效微调原理,对比RAG优劣,提供数据准备、模型选择、在线训练到效果评估的四步实战指南,助力零基础用户低成本打造专属专业AI。(239字)
650 10
AI也能“专业进修”?不用写代码,教你用微调打造行业专属模型
|
9月前
|
数据采集 人工智能 自动驾驶
烦透了AI焦虑?读懂智源2026报告,抓住3个真机会
写完这篇文章我思考了很久,当AI越来越强大,我们作为人类到底还有什么独特的价值? 我的答案是:不是计算能力,而是意义创造。
|
8月前
|
人工智能 缓存 Java
[特殊字符] Spring AI 1.1 来了!Java 程序员的 AI 工具箱,这次直接「装满+扩容」!
Spring AI 1.1重磅发布:850+改进、354项新功能!五大亮点——MCP工具自动调用、Prompt缓存降本90%、自进化Agent、首发支持Gemini/ElevenLabs等多模态模型、安全增强型RAG。Java开发AI应用,更省、更快、更稳、更酷!
624 1
|
人工智能 算法 搜索推荐
智能体领航员:2026 硅基生命如何温柔重塑我们的日常
2026年,AI智能体跃升为“生活领航员”:懂情绪、知健康、伴成长。它重构智慧居家、守护实时健康、定制化学习辅导,更坚守隐私主权、算法克制与真实回归——让科技有温度、有边界、有烟火气。(239字)
512 0
|
10月前
|
IDE 开发工具 C++
Python 初学者常见 10 大误区与避坑指南
本文总结Python初学者易犯的10大编码误区,如缩进错误、混淆“==”与“is”、修改迭代列表等,结合典型案例解析原因并提供实用解决方案,帮助新手规避常见陷阱,建立正确的Python编程思维,提升代码质量与可读性。
|
10月前
|
传感器 网络协议 编译器
C 语言为何能稳居底层开发主流语言宝座
自1972年诞生以来,C语言凭借极致性能、直接操控硬件的能力及完善的生态,在嵌入式系统、操作系统等底层开发领域始终占据核心地位,成为近半个世纪不可替代的编程基石。
|
JSON 算法 开发工具
HarmonyOS NEXT实战:通过QQ分享内容
本教程介绍如何在HarmonyOS Next项目中接入QQ SDK实现分享功能,包含依赖配置、签名生成及分享逻辑代码,适用于教育类应用的内容分享场景。
943 0
|
SQL 关系型数据库 MySQL
Flink CDC 2.3 发布,持续优化性能,更多连接器支持增量快照,新增 Db2 支持
Flink CDC 2.3 发布,新增 Db2 数据源,MongoDB CDC 和 Oracle CDC支持增量快照,MySQL CDC 性能大幅提升
Flink CDC 2.3 发布,持续优化性能,更多连接器支持增量快照,新增 Db2 支持
|
存储 SQL 分布式计算
云上个性化推荐:基于PAI和Hologres的个性化推荐最佳实践
本文主要分享从阿里巴巴计算平台推荐系统的整体解决方案出发,重点介绍基于PAI的向量召回算法和Hologres向量检索的整体架构,以及该架构在云上客户的落地案例和效果分享。
2470 0
云上个性化推荐:基于PAI和Hologres的个性化推荐最佳实践

热门文章

最新文章