位运算符
位运算符是把数字看作二进制来进行计算的
运算符 | 描述 |
---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 |
l | |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 |
>> | 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数 |
位运算符的应用
判断奇偶
一个数&1只剩末位数,如果等于1,则为奇数(1*2**0=1):等于0则为偶数
快速幂
快速幂用来提高高次幂运算的速度,原理:例a^13, 将13换成二进制是1101:13= 2³×1 + 2²×1+ 2¹×0 + 2º×1
.a^13=a**(20+22+23)=(a2º)(a2²)(a2³)
代码
//用快速幂 对幂运算取个位数
#include <stdio.h>
int main()
{
int a,b,c;
c=1;
while(scanf("%d",&a)!=EOF){
b=a%10;
while(a!=0){
if (a&1==1){
c=c*b%10;
}
b=b*b%10;
a>>=1; //二进制向右移一位等于除2
}
printf("%d\n",c);
c=1;
}
return 0;
}