位运算及技巧
2016-03-09 23:47
232 查看
1、位运算符优先级
2、位运算巧妙应用
a、给出任意十进制数,不用进行除法就可以获得其二进制数
a>>k&1能获取十进制数a的第k位二进制
int main()
{
int n = 0;
printf("请输入一个十进制数:");
scanf_s("%d",&n);
for(int i = 0; i <= 15; i++)
{
printf("%d",n>>(15-i)&1);
}
return 0;
} //16位二进制表示
b、不用中间变量,实现a与b的交换
void swap(int a , int b)
{
a = a^b;
b = b^a;
a = a^b;
}
c、不用除法,实现a与b的平均值的求解
int average(int a, int b)
{
return (a&b)+((a^b)>>1);
}
d、判断一个变量a是奇数还是偶数
a&1 = 0 z则为偶数
a&1 = 0 z则为奇数
e、判断数a是否是2的n次方
判断a&(a-1),如果结果为0,则是2的n次方,否则不是。
1 | ~ | 非 |
2 | <<、>> | 移位 |
3 | & | 与 |
4 | ^ | 异或 |
5 | | | 或 |
6 | &=、^=、|=、<<=、>>= |
a、给出任意十进制数,不用进行除法就可以获得其二进制数
a>>k&1能获取十进制数a的第k位二进制
int main()
{
int n = 0;
printf("请输入一个十进制数:");
scanf_s("%d",&n);
for(int i = 0; i <= 15; i++)
{
printf("%d",n>>(15-i)&1);
}
return 0;
} //16位二进制表示
b、不用中间变量,实现a与b的交换
void swap(int a , int b)
{
a = a^b;
b = b^a;
a = a^b;
}
c、不用除法,实现a与b的平均值的求解
int average(int a, int b)
{
return (a&b)+((a^b)>>1);
}
d、判断一个变量a是奇数还是偶数
a&1 = 0 z则为偶数
a&1 = 0 z则为奇数
e、判断数a是否是2的n次方
判断a&(a-1),如果结果为0,则是2的n次方,否则不是。
相关文章推荐
- 【软件工程】开发项目重构的时机和方法
- ABP理论学习之SignalR集成
- 匿名函数与高阶函数的使用
- java二叉树实现、遍历、求深度
- 小代码
- POJ-3687-Labeling Balls-(求最小字典序拓扑序列)逆向建图-拓扑排序
- 幂集合[集合论]
- php 关于时区 date gmdate date_default_timezone_set/get 终极答疑
- 关于域名解析相关的几个记录:DNS A记录 NS记录 MX记录 CNAME记录
- java你可能不知道的事(2)--堆和栈
- Jquery Ajax实现无刷新时返回json数据格式json-default
- Map的三种遍历方法
- android.content.res.Resources$NotFoundException错误处理
- [leetcode 286] Walls and Gates---各个点到门的距离
- java你可能不知道的事(2)--堆和栈
- java你可能不知道的事(2)--堆和栈
- 1048. Find Coins (25)
- 从事web开发方向的一些思考
- Android Studio参数详解
- c++注释