一直在写增删改查,今天接触到二进制数运算的时候感觉有点陌生了,所以今天复习一下。
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^12^3 转化为二进制可以看做是1后面跟着后面3个零即 10002^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 = 1
与右移运算符的区别就是在于负数的运算。往右移,正数左边第一位补0,负数也补0
八、~(取反运算符)~5 = -6
取反就是1为0,0为1,5的二进制位是0000 0101,取反后为1111 1010,值为-6