java基础-位操做符与位移操做符

位操做符是用来操做整数基本数据类型中的单个“比特(bit)”,即二进制位,按位操做符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。java

java对位的操做符都包含那些呢?spa

下来我来罗列一下java的位操做符:it

1. ‘&’ 按位 ‘与’原理

若是a和b值都为1,则结果为1,不然结果为0。扩展

例如:数据类型

  int a = 1;
  int b = 0;
  System.out.println(a & b);  结果是0
二进制

  int a = 1;
  int b = 1;
  System.out.println(a & b);  结果是1
数据

2. ‘|’ 按位 ‘或’移动

若是a和b其中一个值为1,则结果为1,若是两个都为0,则结果为0。生成

例如:

  int a = 1;
  int b = 0;
  System.out.println(a | b);  结果是1

  int a = 0;
  int b = 0;
  System.out.println(a | b);  结果是0

3.'^' 按位 ‘异或’

若是a、b两个值不相同,则异或结果为1。若是a、b两个值相同,异或结果为0。 

 例如:

  int a = 0;
  int b = 1;
  System.out.println(a ^ b);  结果为1

  int a = 1;
  int b = 1;
  System.out.println(a ^ b);  结果为0

4.‘~’非也称为按位取反操做符

这里要提醒的一点是,这里的取反是按照数据的补码进行取反;

  int a = 0;
  System.out.println( ~a);  结果为-1

  int a = 19;
  System.out.println(~a); 结果为:20

  计算原理:

  求出19的二进制码:10011

   19的补码为:00010011

   19的反码为:11101100

那么根据计算公式,咱们能够算出19的反码的10进制数为:-20   

(-1)*2^7 + 1*2^6 + 1*2^5  + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1  + 0*2^0

= -128 + 64 + 32 + 0 + 8 + 4 + 0 + 0

= -20

这里还须要说明一点:“~”是一元操做符,不能与 ”=“ 联合使用,而&、^、|是二元操做符,都可以与 “=” 联合使用

5.‘<<’左位移运算符

左位移是按照操做符右侧指定的位数讲操做符左边的数据向左移动(低位补0);

‘>>’有符号右移运算符

右位移是按照操做符右侧指定的位数讲操做符左边的数据向右移动,有符号右位移运算使用符号扩展,若符号为正,则高位插入0,若符号为负,则高位插入1

‘>>>’无符号右移运算使用零扩展,不管正负,最高位都插入0。

那么如何进行位移运算呢?

int占4个字节的空间即32bit(32位)

那么 19 的二进制数应该为:

  0000 0000 0000 0000 0000 0000 0001 0011

19 << 3  19向左移动3位后的结果

  0000 0000 0000 0000 0000 0000 1001 1000

转换为10进制数为:

1*2^7 + 1*2^4 + 1*2^3

= 128 + 16 + 8

= 152

19 >> 3 19向右移动3位后的结果是

0000 0000 0000 0000 0000 0000 0000 0010

转换为10进制结果为:

1*2^1 = 2

19 >>> 3 无符号向右移动3位结果是 

0000 0000 0000 0000 0000 0000 0000 0010

转换为10进制结果为:

1*2^1 = 2

在这里须要注意的是,位移能够与等号(=)进行联合使用,若是对char、byte或者short类型进行位移运算时则须要先转换为int再进行位移运算,不然直接计算的结果多是不正确的。

相关文章
相关标签/搜索