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));
}
目录
相关文章
|
12月前
|
机器学习/深度学习 人工智能 分布式计算
使用PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建文旅领域知识问答机器人
本次教程介绍了如何使用 PAI ×LLaMA Factory 框架,基于全参方法微调 Qwen2-VL 模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
使用PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建文旅领域知识问答机器人
|
存储
ABB UFC760BE142 可以直接寻址的内存位置
ABB UFC760BE142 可以直接寻址的内存位置
173 0
ABB UFC760BE142 可以直接寻址的内存位置
|
编解码 定位技术
Google Earth Engine——Error: Image.clipToBoundsAndScale, argument ‘input‘: Invalid type的错误解决
Google Earth Engine——Error: Image.clipToBoundsAndScale, argument ‘input‘: Invalid type的错误解决
405 0
Google Earth Engine——Error: Image.clipToBoundsAndScale, argument ‘input‘: Invalid type的错误解决
|
存储 Linux Docker
《第一本Docker书(修订版)》——2.2 在Ubuntu和Debian中安装Docker
这并不意味着上面清单之外的Ubuntu(或Debian)版本就不能安装Docker。只要有适当的内核和Docker所必需的支持,其他版本的Ubuntu也是可以安装Docker的,只不过这些版本并没有得到官方支持,因此,遇到的bug可能无法得到官方的修复。
2550 0
|
4天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
324 102
|
4天前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;
|
5天前
|
缓存 JavaScript 前端开发
JavaScript 的三种引入方法详解
在网页开发中,JavaScript 可通过内联、内部脚本和外部脚本三种方式引入 HTML 文件,各具适用场景。本文详解其用法并附完整示例代码,帮助开发者根据项目需求选择合适的方式,提升代码维护性与开发效率。
197 110