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

参考代码如下:

#include<stdio.h>unsigned setbits(unsigned x, int p, int n, unsigned y)
{return x & ~(~(~0 << n) << (p+1-n)) | (y & ~(~0 << n)) << (p+1-n);
}int main()
{unsigned int x = 73;unsigned int y = 23;int p = 5;int n = 3;int r;r = setbits(x, p, n, y);printf("%d", r); //r的结果应为121return 0;
}

首先说一下题目的意思(题中所指的是从右数的第p位开始),在此假设n=3,题目进行的操作结果如下图所示:

看到上面的过程,我们可以很自然地想到这样来实现,见下图:

可以看出,进行 | 操作可以得到我们想要的结果,那下一步就是将X和Y转换为

对X的转换可以将X&a得到 ,如下图:

接下来需要得到a:

所以a为~((~(~0<<n))<<(p-n+1)),X&a得到,即X & ~((~(~0<<n))<<(p-n+1))。

下一步对Y进行转化,得到,如下图:

首先得到b,即~(~0<<n);然后Y&b,即(Y & ~(~0<<n));然后右移p-n+1位,得到,即(Y & ~(~0<<n)) << (p-n+1)。

最后,将 进行|操作即可得到最后结果。

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

  1. 练习2-7 编写一个函数invert(x,p,n),该函数返回对x执行下列操作后的结果:将x从第p位开始的n个(二进制)位求反(即1变成0,0变成1),x的其余各位保持不变。

    练习2-7 编写一个函数invert(x,p,n),该函数返回对x执行下列操作后的结果:将x从第p位开始的n个(二进制)位求反(即1变成0,0变成1),x的其余各位保持不变. #include< ...

  2. Java黑皮书课后题第10章:*10.15(几何:边框)边框是指包围一个二维平面上点集的最小矩形,编写一个方法,为二维平面上一系列点返回一个边框

    *10.15编写一个方法,为二维平面上一系列点返回一个边框 题目 程序 代码 Test15.java Test13_MyRectangle2D.java 运行结果 题目 点击这里跳转编程练习题10.1 ...

  3. Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积

    *8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积.编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...

  4. 滑动窗口:给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。

    一.问题描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 注意: 字符串长度 和 k ...

  5. 编写一个可以打印不同长度数组内容的函数模板

    #include<iostream> using namespace std; #define N 5 template<typename T> T print(T a[],i ...

  6. C++ - 编写一个从字符串转变成长整型的函数

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! #inc ...

  7. java题编写一个方法_Java方法面向对象习题

    1.编写一个无参方法,输出Hello. package Dongruan; public class ktlx1 { public static void main(String[] args) { ...

  8. 从头学C语言——(1)编写一个简单的C程序

    编写一个简单的C程序 编译器安装完成之后,我们就可以用它来编写代码了. 这里用Dev C++作为示例,我的是5.11的版本(后续版本是其他人开发的分支版本). 1.双击打开软件, 2.点击左上角工具栏 ...

  9. 编写一个移动的游戏背景(含素材视频教程)

    教程目录: 1. 小游戏展示 2. 下载游戏引擎 3. 创作一个移动的背景 4. 让阿菌煽动翅膀 5. 让阿菌模拟重力下坠 6. 让阿菌可以摸鱼 7. 编写游戏开始与结束 8. 编写 boss 剧情 ...

最新文章

  1. html中多边形图形怎么制作,CSS制作图形速查表
  2. 数据结构与算法 | 二叉树的实现
  3. java 常量存储_JAVA 存储空间 寄存器 堆栈 堆 常量存储 非RAM存储
  4. 微服务统计,分析,图表,监控一体化的HttpReports项目在.Net Core 中的使用
  5. 低代码发展专访系列之八:低代码平台能够打破企业「应用孤岛」现象吗?
  6. IT 实力较量:决战超级数据中心之巅
  7. 计算机应用技术自我分析,计算机应用*个人自我鉴定
  8. (王道408考研操作系统)第二章进程管理-第三节4:信号量机制(整型、记录型信号量和P、V操作)
  9. android 模仿微信布局,【Android初学者】框架布局:仿微信页面制作
  10. c语言pow函数原型_c语言中pow函数的用法是什么?
  11. PHP商城源码分销奖励/绑定关系设计
  12. C语言例题9:冒泡排序
  13. wps怎么导入access_WPS Access 2013_access 2013下载-下载之家
  14. 《云栖社区2017年度内容特辑》新鲜出炉!800+份大会PPT、20+技术专题、100+话题...快抱走!
  15. “极地测绘之父”鄂栋臣逝世,曾签下生死状首征南极
  16. 判断今天是星期几 暴力枚举
  17. 淘宝订单详情(插旗)API操作 API 返回值说明
  18. 弘泰俱乐部杨乐、车彦娇团队:凝聚慈善力量,关爱孤困儿童
  19. 罗永浩曾经深刻地改变过这个世界
  20. C#中ref和out关键字的应用以及区别。

热门文章

  1. Java面试之场景题汇总
  2. centos 7搭建直播间
  3. 快速了解端口banner
  4. 龙,中国,不是dragon
  5. 上面两点下面一个三角形_解三角形的新视野——定角对定边~
  6. (数学)POJ - 1365 Prime Land
  7. 什么是java的类加载器_JAVA-大白话探索JVM-类加载器(一)
  8. MAVEN5分钟入门
  9. PPT学习笔记,相关好用软件吐血推荐
  10. 耗时五个月的项目实训——影行App