public class Operator {
public static void main(String[] args) {
int x = 20;
boolean y = false;
//把true赋给y &&左边为真执行下一步
//先运算后赋值 结果为true x++
//x++ 结果为222
if (y = true && x++ == 20) {
x++;
}
//x的值为22 大于20所以为true
//&运算符不管前面真假,后面都执行
//true & true x++
if ((x | 1) > 20 & y) {
x++;
}
System.out.println(x); //23
/*
* 0001 0100
* 右移两位-->0000 0101
*/
System.out.println(20 >> 2); //5
/*
* 1001 0100 原码
* 负数先转换补码
* 1110 1011 反码
* +1
* 1110 1100 补码
* 右移两位-->1111 1011
* -1
* 1111 1010
* 1000 0101 再转换回来原码
*/
System.out.println(-20 >> 2);//-5
/*
* 0001 0100
* 左移两位--->0101 0000
*/
System.out.println(20 << 2);//80
/*
* 1001 0100
* 1110 1011
* 1110 1100
* 左移
* 1011 0000
* 1010 1111 //0-1减去等于1 向高位借了
* 1101 0000 //符号位不变其他取反
*/
System.out.println(-20 << 2);//-80
}
}