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左变向——左移
图1-1
如图1-1,int num=31;
int num1=31<<3;
左移,就是将num的补码(原码)向左平移若干单位,并在空缺位上补上0;
1.1.2 AI 向右变向——右移
图1-2
如图1-2,int num=31;
int num1=31>>2;
右移,就是将num的补码向右平移若干单位,其余位置补上0;
当然如上只是num为正数是的情况;
若num为负数的话;
图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 & | ^
图1-4
图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;