Java 位运算符
一直在写增删改查,今天接触到二进制数运算的时候感觉有点陌生了,所以今天复习一下。
Java中位运算符主要用来对操作数二进制的位进行运算。按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值。
一、二进制与十进制转换练习
1.1、十转二
十进制数10转为二进制
方法一:
10除以2 得5 余数为 0
再拿刚才的5除以2得2 余数为1
2除以2得1 余数为0
1除以2 直接余数为1
那么就为1010
方法二(推荐)、
10
= 8 + 2
= 2^3 + 2^1
2^3 转化为二进制可以看做是1后面跟着后面3个零即 1000
2^1 转为为二进制可以看做是1后面跟着后面1个零即 10
1000
+ 10
————————
1010
位数对齐后相加,满二进位
1.2、二转十
二进制数1110转为十进制
方法一、
1011
这是个二进制数,所以每个数都有2的影子。所以我们从右边数,
1转为 1*2^0等于1
1转为 1*2^1等于2
0转为 0*2^2等于0
1转为1*2^3等于8
1+2+0+8=11
方法二(推荐)、
1110
=1000 + 100 + 10
= 10^3 + 10^2 + 10^1
————————
然后二进制转为十进制,需要把底数10转为2得到
= 2^3 + 2^2 + 2^1=14
二、&按位与
3&5=1
&按位与的运算规则是将两边的数转换为二进制位,&有并且的意思,在这里是两个为1才1。1&0=0 , 0&1=0 , 0&0=0。把两个数的二进制数从右边开始对齐,3为11,5为101,只有第一个数1都为1所以3&5=1
3 & 5
11
101
———————— 001
001=1*2^0=1
三、| 按位或
3|5 =1
|按位或的运算规则是将两边的数转换为二进制位,|有或者的意思,在这里是两个数中有一个1就为1, 1|1 = 1 , 0|0 = 0 , 0|1 = 1。
3 | 5
11
101
———————— 111
111 = 1000 - 1 = 2^3 - 2^0 = 7
四、^异或运算
3^5 =6
其运算规则为1^0 = 1 , 1^1 = 0 , 0^0 = 0。相等的为0,不相等的为1
3 ^ 5
11
101
———————— 110
五、<<左移运算符、
5 << 2 = 20
5<<2的意思为5的二进制位往左挪两位,右边补0,5的二进制位是101 , 往左挪两位就是1 0100 。如果是负数,右边补1
或者看成 5* 2^2 = 20
六、>>(右移运算符)
5 >> 2 = 1
右移两位就是把101左移后为0000 0001,正数左边第一位补0,负数补1,等于除于2的n次方,结果为1
七、>>>(无符号右移运算符)
5 >>> 2 = 1
与右移运算符的区别就是在于负数的运算。往右移,正数左边第一位补0,负数也补0
八、~(取反运算符)
~5 = -6
取反就是1为0,0为1,5的二进制位是0000 0101,取反后为1111 1010,值为-6