------- iOS培训、android培训、java培训、期待与您交流! ----------
/*
运算符:
用来连接操作数,组成有意义的式子
分类:
算术关系 逻辑位
位运算
用于整数的二进制位之间的运算
& 按位与:同1位1,有0为0
9 & 8
00000000000000000000000000001001
&00000000000000000000000000001000
----------------------------------
00000000000000000000000000001000 8 正数无需转换
| 按位或:有1位1同0位0
9 | 8
00000000000000000000000000001001
|00000000000000000000000000001000
----------------------------------
00000000000000000000000000001001 9
~ 按位取反:1变0,0变1
~9
~00000000000000000000000000001001
----------------------------------
11111111111111111111111111110110 补码 负数需转换(可以-1取反也可以取反+1)
11111111111111111111111111110101 反码
10000000000000000000000000001010 原码 -10
^ 按位异或:相同位0,不同位1
9 ^ 8
00000000000000000000000000001001
^00000000000000000000000000001000
----------------------------------
00000000000000000000000000000001 1
>> 右位移:低位移出舍去,高位移进补符号位
8 >> 2
记忆技巧:向右移位n,相当于原数/2^n
00000000000000000000000000001000
00000000000000000000000000000010 2
右移位,不会改变一个数的正负性
<< 左位移:高位移出舍去,低位移进补0
8 << 2
记忆技巧:向左移位n,相当于原数*2^n
00000000000000000000000000001000
00000000000000000000000000100000 32
致命问题:左移可能会改变一个数的正负性
100000000000000000000000001000
000000000000000000000000100000
*/
#include <stdio.h>
int main(int argc,const char * argv[]) {
int result1 = 9 & 8;
printf("result1 = %d\n",result1);
int result2 = 9 | 8;
printf("result2 = %d\n",result2);
int result3 = ~9;
printf("result3 = %d\n",result3);
int result4 = 9 ^ 8;
printf("result4 = %d\n",result4);
int result5 = 8 << 2;
printf("result5 = %d\n",result5);
int result6 = -8 << 2;
printf("result6 = %d\n",result6);
int result7 = 8 >> 2;
printf("result7 = %d\n",result7);
int result8 = -8 >> 2;
printf("result8 = %d\n",result8);
int a = 5;
//00000101 5
//00000001 1
//00000001 1
//00000110 6
//00000001 1
//00000000 0
int result9 = a & 1;//1获取最低位(可判断奇偶性)2把某一位置0
printf("result9 = %d\n",result9);
return 0;
}