JAVA#位运算符’学习笔记

1.1 位运算符

                                                                                             位运算符

运算符

运算

范例

<<

左移

3 << 2 = 12 --> 3*2*2=12

>>

右移

3 >> 1 = 1  --> 3/2=1

>>>

无符号右移

3 >>> 1 = 1 --> 3/2=1

&

与运算

6 & 3 = 2

|

或运算

6 | 3 = 7

^

异或运算

6 ^ 3 = 5

~

反码

~6 = -7

                                                                                         表1-1

1.1.1 AI左变向——左移

JAVA#位运算符’学习笔记

                                                                                            图1-1

如图1-1,int num=31;

                  int num1=31<<3;

    左移,就是将num的补码(原码)向左平移若干单位,并在空缺位上补上0;

1.1.2 AI 向右变向——右移

JAVA#位运算符’学习笔记

                                                                                          图1-2

如图1-2,int num=31;

                 int num1=31>>2;

右移,就是将num的补码向右平移若干单位,其余位置补上0;

当然如上只是num为正数是的情况;

若num为负数的话;

JAVA#位运算符’学习笔记

                                                                                        图1-3

我们已经知道负数的补码为其反码+1,所以可知-31的补码如上图1-3-1;

int num=-31>>2;//-31右移两个单位,由于第一位为1,所以在其空缺的其他位也都应改为1;

int num1=-31>>>2;//-31无符号右移2个单位,由于是无符号右移,所以尽管第一位为1,其空缺位应为0;

1.1.3   &     |     ^

JAVA#位运算符’学习笔记

                                                                                           图1-4

JAVA#位运算符’学习笔记

                                                                                           图1-5

图1-4说明了&与|的位运算方法;

图1-5说明了^异或运算的方法;

12^5^12==5;

可推得:m^n^m==n;

                m^n^n==m;

此性质的应用:数值交换——

                          1.  int temp=a;

                           a=b;

                             b=temp;

                            2.m=m^n;

                               n=m^n;//m^n^n==m;即把m的值赋给n;

                               m=m^n;//m^n^m==n;即把n打的值赋给m;