位运算符 左移:在内存空间中,高位丢弃,低位补0,在实际的值中相当于乘以2 ex:
#include<stdio.h>
int main()
{
int i=5;
printf("%d",i<<1);
}
此时输出的结果为10 对于5的内存:0000 0000 0000 0101-->000 0000 0000 01010 -->0000 0000 0000 1010 右移:内存空间中,低位丢弃,正数的高位补0,负数的高位补1,实际值相当于除以2。但是负数右移动,偶数直接除以2,奇数要先减1再除以2 ex:
#include<stdio.h>
int main()
{
int i=-7;
printf("%d",i>>1);
}
此时输出的结果是-4 对于5的内存:0000 0000 0000 0101-->00000 0000 0000 010 -->0000 0000 0000 0010 异或:相同的数字进行异或,结果为0,任何数字和0异或的结果是其本身。 用法:如输入5个数,其中2个数出现2次,1个数是出现1次,找出出现1次的那个数,例如输入的是8 5 3 5 8,输出的值为3 代码:
#include<stdio.h>
int main()
{
int arr[5];
for(int i=0;i<5;i++)
{
scanf("%d",&arr[i]);
}
int res=0;
for(int i=0;i<5;i++)
{
res^=arr[i];
}
printf("%d",res);
return 0;
}
按位与和或:“&” “|” 即用两个数的每一位进行与和或 二进制 5:0000 0000 0000 0101 7:0000 0000 0000 0111 此时一个一个数位进行比较即可 按位取反 “~” 数位上的数字是1变为0,0变为1
(若有问题,欢迎指正)