目录
基本知识
四个妙用
1.判断整型变量奇偶
原理
代码
2.交换变量
原理
代码
3.乘/除2的n次
原理
代码
4.取余
原理
代码
5.得到整型变量二进制形式某位置的值
原理
代码
全部代码
实验结果截图
基本知识
我们常用十进制,计算机内部存储的是二进制,用位运算会快一点。在需要大量运算是,位运算能节省时间,提高oj的通过率。
四个妙用
1.判断整型变量奇偶
使用位运算符:&
原理
2的0次是1,2的1次是2。根据按权展开可知,只需判断最后一位即可。1的二进制是000...001。根据&运算符的特点,奇数末位是1,和1与为1,偶数则为0。
代码
//判断int类型变量奇偶
bool Judge(int n)
{
return(n&1);//奇数返回1,偶数返回0
}
2.交换变量
使用位运算符:^
原理
两个数相同,则返回0,否则,返回1。a=a^b;b=(a^b)^b=a;a=(a^b)^a=b;
代码
//交换变量 利用异或
void Change()
{
int a, b;
printf("请输入两个整数:\n");
scanf("%d %d",&a,&b);
printf("%d %d交换后为:", a, b);
a ^= b;
b ^= a;
a ^= b;
printf("%d %d\n", a, b);
}
3.乘/除2的n次
使用位运算符:<<和>> 乘用的比较多
原理
移位。不溢出的情况下,左移补0,就是乘2了。除是右移,类似,但是可能损失精度。
代码
//num乘2的n次
int Multi(int num, int n)
{
return num << n;
}
//num除2的n次
int Devide(int num, int n)
{
return num >> n;
}
4.取余
使用位运算符:&
原理
例如,15对8取余,15的二进制是00...01111 最多就是余7喽。8-1就是7,二进制为00...111,和00...0111相与就是余数7。
代码
//得到余数
int Yu(int num,int n)
{
int i = 1 << n;
return num&(i-1);
}
5.得到整型变量二进制形式某位置的值
原理
向右移位与1进行“&”操作,可以用来得到二进制。
位置 |
4 |
3 |
2 |
1 |
0 |
整数(十进制) |
20 |
二进制 |
1 |
0 |
1 |
0 |
0 |
代码
//取十进制整型变量a的二进制形式的第k位
int GetWei(int n, int k)
{
int m;
m = n >> k & 1;
return m;
}
全部代码
/*
Project: bitwise_useful(位运算的妙用)
Date: 2019/03/01
Author: Frank Yu
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
实验结果截图

实验结果截图

实验结果截图
更多数据结构与算法实现:数据结构(严蔚敏版)与算法的实现(含全部代码)
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。