//看代码就可以了解- -!我就不多说了。现在网上关于这三个操作符有很多资料,但大都不全,或说的抽象,希望下面这种代码式讲解对大家有用。
package org.penetrate.www.se.base.operator;
public class OperatorStudy {
public static void main(String[] args) {
// usage of ++/--
int a, b = 6, c = 7;
a = b++ + c++;
System.out.println("a:" + a + "/t" + "b:" + b + "/t" + "c:" + c + "/t");
//result:a:13 b:7 c:8
a = 0;
b = 6;
c = 7;
a = b++ + c++;
System.out.println("a:" + a + "/t" + "b:" + b + "/t" + "c:" + c + "/t");
//result:a:13 b:7 c:8
/*
* usage of >> & >>>.>>、<<为有符号位移运算符,而>>>为无符号位移运算符
* 首先,标准下2进制数值以“符号位+数值位”表示.
* x >>> y:将x换算成补码的形式,符号位与数值位都向右移(y mod 位数)个位,新位补0,出位抛弃.
* x >> y:将x换算成补码的形式,符号位不变,数值位向右移(y mod 位数)个位,新位补符号位值,出位抛弃.
* x << y:将x换算成补码的形式,符号位不变,数值位向左移(y mod 位数)个位,新位补符号位值,出位抛弃.
* note:(y mod 位数)这个在后台的操作会强制转换(y mod 位数)为int.
*/
//-----------------------------------------------------------------
int x = 32;
x = x >>> 5;
System.out.println(x);//result:1
x = 32;
x = x >>> 5;
System.out.println(x);//result:1
x = 32;
x = x >>> 32;
System.out.println(x);//result:32
x=-1;
x=x>>>1;
System.out.println(x);//result:2147483647
short z=32;
z=(short) (z>>>5);
System.out.println(z);//result:1
long l=32;
l=l>>>64;
System.out.println(l);//result:32
// note:<<< is not a operator
//-----------------------------------------------------------------
x = -32;
x = x >> 2;
System.out.println(x);//result:-8
byte y = 32;
y = (byte)(y >> 33);
System.out.println(y);//result:16
x=-5;
x=x>>1;
System.out.println(x);//result:-3
//-----------------------------------------------------------------
x=-32;
x=x<<33;
System.out.println(x);//result:-64
x=32;
x=x<<33;
System.out.println(x);//result:64
}
}