![](https://img-blog.csdnimg.cn/img_convert/9be14395d20ff02bd2b9ffe45cc46f22.png)
![](https://img-blog.csdnimg.cn/img_convert/e8749b59464dfbc1576c3de96a8ced6f.png)
![](https://img-blog.csdnimg.cn/img_convert/83e850429af94d2f44e5d43edd146668.png)
1byte
unsigned char a,b;
a = 6 b= 5;
按位与
a & b = 0000 0110 &0000 0101 =
0 1 1 0
0 1 0 1
___——————
0 1 0 0 = 4
a & b = 4;
dat = 0xAA; ///b1010 1010 ;
for(j=0;j<8;j++)
{ 0101,0100
if(dat & 0x80) //(dat)1010 1010 & b1000 0000(0x80)
{///1
1,3,5,7
}
else
{///0
2,4,6,8
}
dat <<= 1;
}
1010 1010 << 1 0101,0100
a&b = 1 & 1 =1;
a&b = 0 & 1 = 0
a&b = 1 & 0 = 0
a&b = 0 & 0 = 0
dat <<= 1; dat = dat<<1;
按位或
a | b = 0000 0110 | 0000 0101
0000 0110
0000 0101
------------
0000 0 111 = 7
a | b = 7;
按位异或
a ^b = 0000 0110 | 0000 0101
0000 0110
0000 0101
------------
0000 0011 = 3
a ^b = 3
按位取反
a = 6 0000 0110
1111 1001 = 249
~a = 249
249 +6 =255 FF 1111 1111
<< 左移
unsigned char a; a=6;
unsigned char b;
b = a<< 8;
0000 1100 C
b = a << 1 = 0x0c = 12;
>> 右移
unsigned char a; a= 6;
unsigned char b;
b = a>>1;
0000 0 011 = 3;
b = a>>1 = 3;
b = a>> 2
000000 01 = 1 /// 10
按位与 &
bit a, b;
a 1 0
b 1 0
a&b = 1 & 1 =1;
a&b = 0 & 1 = 0
a&b = 1 & 0 = 0
a&b = 0 & 0 = 0
按位或 |
bit a,b;
a | b = 1 | 1 = 1
a | b = 0 | 1 = 1
a | b = 1 | 0 = 1
a | b = 0 | 0 = 0
按位异或 ^
bit a,b;
a ^ b = 1 ^ 1 = 0
a ^ b = 0 ^ 1 = 1
a ^ b = 1 ^0 = 1
a ^ b = 0^ 0 = 0
按位取反 ~
bit a;
~a
a = 0 ~a =1;
a =1 ~a =0;