C语言位运算题解
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define NONBLANK 1
main()
{
/* 位运算 */
int n;
printf("开始启动程序:\n");
printf("开始调用函数:\n");
int setbits(int, int, int, int);
int result = setbits(, , , );
printf("结果等于%d", result);
system("pause");
return ;
}
/* 将x中从p开始右边的n位设置为y中右边n位的值,返回结果 */
int setbits(int x, int p, int n, int y)
{
int old_x = x & ~(~ << p-n+); //先将x中移出去的那p-n+1位保存起来
/* 为了方便,这里先以16位为例
以10举例:0000 0000 0000 1010
x=10, p=4, n=3, y=2
因为位数是从右往左数,并且从0开始,所以右移的时候,p-n要加上1才对
old_x:也就是 0000 0000 0000 0010
*/
int new_x = (x >> p - n + ) | ~(~ << n); //x中除了p位开始到右边n位,其余位保持不变,如何保持不变?“和1与”、“和0或”都能保持不变
// new_x = 0000 0000 0000 0010 | 0000 0000 0000 0111
// new_x = 0000 0000 0000 0111 ----再把y的值变成除了右边n位不变,其余位都变成1,这样new_x和y按位与就得出结果了
//注意:如果想和y按位或,就得让new_x右边n位都是0才行。这样得出的结果和上面的一样。但是后面的处理可能更麻烦一些。
int new_y = y | (~ << n);
int result = new_x & new_y;
result = result << p - n + ; //恢复原来的位置
result = result | old_x; //最终结果
return result;
}
这是C语言书中的一道题。
C语言位运算题解的更多相关文章
- C语言位运算
C语言位运算详解 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,shor ...
- C语言位运算+实例讲解(转)
按位或 按位与 按位异或 按位取反 左移右移 C语言位运算 有6种: &, | , ^(亦或), >(右移). 注意:参与位运算的元素必须是int型或者char型,以补码形式出现. 按位 ...
- C语言位运算详解[转]
作者:911 说明:本文参考了http://www2.tsu.edu.cn/www/cjc/online/cyuyan/,算是对其的修正,在此将本文列为原创,实有抄袭之嫌疑.甚是惭愧! 位运算是指按二 ...
- C语言位运算详解
位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整形操作数,即只能用于带符号或无符号的char.short.int与long类型 ...
- C语言 位运算
1G=1024M; 1M=102KB; 1KB=1024B(字节); 1B=8bits(位); #include<stdio.h> #include<stdlib.h> //C ...
- C语言位运算详解(转载)
转载自:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C ...
- C 语言 ----位运算
位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作 运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类 ...
- C语言位运算、移位运算 经典示例
概述: C语言的位级运算可以运用到任何“整数”的数据类型上,如char.short.int.long.long long.或者unsigned这样的限定词.基本的位运算有与.或.非.异或等等. C语言 ...
- 嵌入式C语言位运算之清位置位
如题,在嵌入式开发中,掌握位运算是节省开发时间和提高开发效率的一种高效方式. 我们不得不去熟悉如何快速掌握位运算这种高效的技巧,接下来看看程序.. #include <stdio.h> # ...
随机推荐
- 小菜鸟之oracle
oracle 存储过程 函数 创建 删除 参数 传递 函数 查看 包 系统包 分类: Oracle 2011-10-27 17:31 264人阅读 评论(0) 收藏 举报 认识存储过程和函数 存储 ...
- 2019牛客多校第七场E Find the median 权值线段树+离散化
Find the median 题目链接: https://ac.nowcoder.com/acm/contest/887/E 题目描述 Let median of some array be the ...
- logstash grok
input { file { path => "/opt/service/test-service/logs/catalina-error*.log" type => ...
- JSON运用在文件
#include <iostream>#include <fstream>#define JSON_IS_AMALGAMATION#include "json/jso ...
- Git详细操作
Git详细操作 一.本地配置 1公钥钥配置 1.参考帮助文档:https://gitee.com/help/ 仓库管理 =公钥管理 =生成/添加SSH公钥 ssh-keygen -t rsa -C & ...
- Makefile中 -I -L -l区别
我们用gcc编译程序时,可能会用到"-I"(大写i),"-L"(大写l),"-l"(小写l)等参数,下面做个记录: 例: gcc -o he ...
- Marketing Cloud demo环境和API使用方法说明
version 1.0 作者:Wang Jerry 更多问题请联系我 demo 系统url:https:/jerry.hybris.com/sap/bc/ui5_ui5/ui2/ushell/shel ...
- Python3 GUI:PyQt5环境搭建
配置镜像源 最近用Python内置的Thinter写了个小工具,发现界面略朴素,于是决定转向PyQt5.先配置镜像源,否则只能龟速下载. C:\Users\你的用户名下新建目录pip 在pip目录下新 ...
- json-server
json-server 一个前端模拟数据的本地化服务器 安装 npm install -g json-server 查看是否安装成功 json-server -v 新建一个文件夹 在文件夹中新建db. ...
- Mysql(四):数据操作
一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...