一、移位操作符(<<和>>)
1、左移操作符
移位规则:左边抛弃,右边补0
例:10的二进制
2、右移操作符
①逻辑右移:左边用0填充,右边丢弃(比较暴力)
②算术右移:左边用原该值的符号位填充,右边丢弃(大部分编译器)
例:正数10的二进制
负数1的二进制
若是逻辑右移左边直接补0,但是算术右移则用原该值的符号填充!!
二、位操作符
按位与(&)、按位或(|)、按位异或(^)、按位取反(~)
注:他们的操作数必须是整数
计算规则:对应的二进制位进行运算
&:只要有0就是0,两个同时为1才是1
|:只要有1就是1,两个同时为0才是0
^:相同时为0,相异时为1
~:按位取反
练习1:求二进制中1的个数
#include<stdio.h>
int Nov(int n){
int count=0;
while(n){
n=n&(n-1);
count++;
}
return count;
}
int main(){
int num=0;
scanf("%d",&num);
int n=Nov(num);
printf("%d",num);
return 0;
}
练习2:判断一个数n是否为2的次方
#include<stdio.h>
int main(){
//n&(n-1)==0,则为2的次方!
int n = 0;
scanf("%d",&n);
if(n&(n-1)==0){
printf("YES\n");
}
else{
printf("NO\n");
}
return 0;
}