一 位运算符
&与运算:被比较的两个数,最后一位都为1,结果才是1
比如11&15,他们二进制是1011和 1111
1011
1111
结果1011,所以是11
比如128和129,他们二进制是10000000和 1000000100001101
10000000
10000001
结果=10000000所以结果是128
|或运算:被比较的两个数的二进制位数只有一个是1就为1,
我们计算11|15
1011
1111
=1111所以结果是15
我们计算128和129
10000000
10000001
=10000001结果为129
^异或运算:真真为假,假假为假,真假为真,假真为真。是转换成二进制按位进行比较,1111^0000 1-0为真1,
1-0为真1,1-0为真1,1-0为真1,那么结果就是1111,还是15.
~非运算:如果二进制位是1,结果为0,如果为是0,结果为1
比如~11
那么结果就是1011 – 0100
二 位移运算
<<左位移
向左移动n位,然后在低位补0.
16<<3
00000000 0000 0000 0000 0000 0001 0000红色为移掉部分
结果00000000 0000 0000 0000 0000 1000 0000 红色为补齐
结果:128
>>右位移(有符号)
向右移动n位,在高位补0,如果为负数,在高位补1
16>>3
00000000 0000 0000 0000 0000 0001 0000 红色为移掉部分
00000000000 0000 0000 0000 0000 0001 0 红色为补齐部分
结果为2
-16>>3
0000 0000 0000 0000 0000 0000 0001 0000
去反
1111 1111 1111 1111 1111 1111 1110 1111
加1
1111 1111 1111 1111 1111 1111 1111 0000
然后右移3位
1111 1111 1111 1111 1111 1111 1111 0000
1111 1111 1111 1111 1111 1111 1111 1110
>>>无符号右位移
向右移动n位,在高位补0,不考虑正负符号
16>>>3结果为2
-16>>>3
1111 1111 1111 1111 1111 1111 1111 0000
0001 1111 1111 1111 1111 1111 1111 1110
====================================================
假设A = 25,B =44;
那么二进制总共8位,每一位对应着一个值,从最低位到最高位依次是1,2,4,8,16,32,64,128,所以我们的每一个数组都可以根据这个计算出来
A= 25, 16 < 25 < 32,所以16位置肯定是1,现在还剩25-16 =9, 8< 9 <16,所以8的位置肯定是1 ,最后9-8 =1, 1的话刚好是最低位的位置
结果就是
12864 32 16 8 4 2 1
0 0 0 1 1 0 0 1
B= 44,<32<44<64,所以32的位置上是1,44-32=12 < 16所以 8的位置1,12-8 = 4 那么4的位置就是1,最终二进制结果就是
12864 32 16 8 4 2 1
0 0 1 0 1 1 0 0
那么我们现在计算 A& B 和 A|B 和 A^B
第一种 A& B
00 0 1 1 0 0 1
00 1 0 1 1 0 0
我们知道& 表示比较的双方都需要为true
所以0&0= 0, 0&1=0 1&0 =0 1 & 1 =1
所以结果就是
00 0 0 1 0 0 0 转化为10进制就是8
第二种 A|B 只要有一个是true,结果为true
0|0= 0 1|0 =1 0|1 =1 1|1 =1
00 0 1 1 0 0 1
00 1 0 1 1 0 0
00 1 1 1 1 0 1 转化为10进制就是61
第三种异或A^B
异或表示有一个为真且有一个为假才算真,否则为假也就是不能同时为真或者同时为假
00 0 1 1 0 0 1
00 1 0 1 1 0 0
00 1 1 0 1 0 1 结果为0*128+0*64+1*32 +1*16+0*8 + 1*4 + 0*2 + 1*1= 53