练习2-6 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
练习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的其余各位保持不变。相关推荐
- 练习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< ...
- Java黑皮书课后题第10章:*10.15(几何:边框)边框是指包围一个二维平面上点集的最小矩形,编写一个方法,为二维平面上一系列点返回一个边框
*10.15编写一个方法,为二维平面上一系列点返回一个边框 题目 程序 代码 Test15.java Test13_MyRectangle2D.java 运行结果 题目 点击这里跳转编程练习题10.1 ...
- Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积
*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积.编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...
- 滑动窗口:给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。
一.问题描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 注意: 字符串长度 和 k ...
- 编写一个可以打印不同长度数组内容的函数模板
#include<iostream> using namespace std; #define N 5 template<typename T> T print(T a[],i ...
- C++ - 编写一个从字符串转变成长整型的函数
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! #inc ...
- java题编写一个方法_Java方法面向对象习题
1.编写一个无参方法,输出Hello. package Dongruan; public class ktlx1 { public static void main(String[] args) { ...
- 从头学C语言——(1)编写一个简单的C程序
编写一个简单的C程序 编译器安装完成之后,我们就可以用它来编写代码了. 这里用Dev C++作为示例,我的是5.11的版本(后续版本是其他人开发的分支版本). 1.双击打开软件, 2.点击左上角工具栏 ...
- 编写一个移动的游戏背景(含素材视频教程)
教程目录: 1. 小游戏展示 2. 下载游戏引擎 3. 创作一个移动的背景 4. 让阿菌煽动翅膀 5. 让阿菌模拟重力下坠 6. 让阿菌可以摸鱼 7. 编写游戏开始与结束 8. 编写 boss 剧情 ...
最新文章
- html中多边形图形怎么制作,CSS制作图形速查表
- 数据结构与算法 | 二叉树的实现
- java 常量存储_JAVA 存储空间 寄存器 堆栈 堆 常量存储 非RAM存储
- 微服务统计,分析,图表,监控一体化的HttpReports项目在.Net Core 中的使用
- 低代码发展专访系列之八:低代码平台能够打破企业「应用孤岛」现象吗?
- IT 实力较量:决战超级数据中心之巅
- 计算机应用技术自我分析,计算机应用*个人自我鉴定
- (王道408考研操作系统)第二章进程管理-第三节4:信号量机制(整型、记录型信号量和P、V操作)
- android 模仿微信布局,【Android初学者】框架布局:仿微信页面制作
- c语言pow函数原型_c语言中pow函数的用法是什么?
- PHP商城源码分销奖励/绑定关系设计
- C语言例题9:冒泡排序
- wps怎么导入access_WPS Access 2013_access 2013下载-下载之家
- 《云栖社区2017年度内容特辑》新鲜出炉!800+份大会PPT、20+技术专题、100+话题...快抱走!
- “极地测绘之父”鄂栋臣逝世,曾签下生死状首征南极
- 判断今天是星期几 暴力枚举
- 淘宝订单详情(插旗)API操作 API 返回值说明
- 弘泰俱乐部杨乐、车彦娇团队:凝聚慈善力量,关爱孤困儿童
- 罗永浩曾经深刻地改变过这个世界
- C#中ref和out关键字的应用以及区别。