#include <stdio.h>
//按位运算大全
void yu() { //&
int o=100;
printf("%d",o&1);
//将1转换为2进制,假设存储在16位机上, 是0000000000000001,随便给一个数字进行与运算,
//只有同时为1 ,那么答案才能是1,所以无论这个数字其他位是什么东西,最终这个数字的最低位是1,
//那么答案就是0000000000000001,如果最低位是0 ,那么答案就是0000000000000000,也就是零,
//二进制里面,只要最后一位是1,那么一定是奇数。
//最后一位是0,那么一定是偶数。
//经常用这个判断一个数是奇数还是偶数
/*
if(p&1) {
p+=1;
}else{
p-=1;
}
如果p是偶数,那么p加1,else,如果奇数,减1
*/
}
void yidong() { //<<和>>,
int p=100;
printf("%d\n",p>>1);
//>>,相当于将数字变成二进制之后,将二进制右移, 前面空缺的补零 ,相当于除以2的几次方,
//比如:p>>=1 ;意思是右移一位,也就是除以二。
}
int main() {
yu();//&
yidong();//<<,>>
return 0;
}
&
//将1转换为2进制,假设存储在16位机上, 是0000000000000001,随便给一个数字进行与运算,
//只有同时为1 ,那么答案才能是1,所以无论这个数字其他位是什么东西,最终这个数字的最低位是1,
//那么答案就是0000000000000001,如果最低位是0 ,那么答案就是0000000000000000,也就是零,
//二进制里面,只要最后一位是1,那么一定是奇数。
//最后一位是0,那么一定是偶数。
//经常用这个判断一个数是奇数还是偶数
/*
if(p&1) {
p+=1;
}else{
p-=1;
}
如果p是偶数,那么p加1,else,如果奇数,减1
*/
<<,>>
//>>,相当于将数字变成二进制之后,将二进制右移, 前面空缺的补零 ,相当于除以2的几次方,反之则为乘
//比如:p>>=1 ;意思是右移一位,也就是除以二。