Java中的位运算符

(1)位运算的概念

位运算其实就是二进制的运算,加减乘除适用于十进制,而位运算就是二进制的运算,       

Java的位运算(bitwise operators )直接对整数类型的位进行操作,这些整数类型包括long、int、short、char 和byte,位运算符具体如下表:

 

 

(2)&(与)运算

 

例如:4 & 7 ,则先把4和7换算成二进制:

 

4 :     0100

 

7:      0111

 

结果: 0100

 

将结果换算成10进制为4。

 

运算规则为:1表示true,0表示false。而与运算的时候相同位之间其实就是两个Boolean的运算

                     全true(1),即为true(1)

                     全false(0),即为false(0)

                     一false(0)一true(1),还是false(0)

(3)|(或)运算

例如:5 | 9   

  5 :  0000 0101 

  9 :  0000 1001

结果:0000 1101

将结果换算成10进制为13。

运算规则:遇true(1)就是true(1),无true(1)就是false(0)

(4)<<(左移运算符)

 左移就是把所有位向左移动几位。如:   12 << 2    意思就是12向左移动两位,

12的二进制: 0000 1100

 所有的位全都向左移动两位,然后把右边空的两个位用0补上,最左边多出的两个位去掉,最后得到的结果就是00110000  结果就是48

一个快速的算法 :  M << n   其实可以这么算   M << n  = M * 2n

(5)>>(右移运算符)

与左移运算符相反,即把所有位向右移动几位。如果是正数,左边空的补零;如果是负数,左边空的补1。

正数:5>>1=2

     5:0000 0101

结果:0000 0010   将结果换成10进制为2。

负数:-5>>1=-3

    -5:1111 1011

结果:1111 1101   将结果换成10进制为-3。

(6)~(取反运算符)

 

即把0变成1,把1变成0。

(7)将负数转换成二进制

问题:-3如何转换成二进制?

首先我们将+3转换成二进制,假设是为int类型(32位)的,那么二进制表示为:

0000 0000 0000 0000 0000 0000 0000 0011                --这称之为原码:一个整数的绝对值的二进制表示称之为原码。

负数转换成二进制分为3步:

1、首先将负数转换为对应的原码

-3的原码为(也就是+3转换成二进制后的字符串):

0000 0000 0000 0000 0000 0000 0000 0011 
2、再将原码的每一位做取反操作得到反码。   取反操作:0变为1     1变为0;  取反后的结果即为:

1111 1111 1111 1111 1111 1111 1111 1100
3、将反码+1得到补码

1111 1111 1111 1111 1111 1111 1111 1101

 

posted on 2021-03-03 16:06  满船清梦压星河1024  阅读(818)  评论(0)    收藏  举报