package com.shob.coll;
public class Fu {
public static void main(String[] args) {
int a = 128;
int b = 129;
/**
* & --- 与运算符
* 两个操作数中位都为1,结果才为1,否则结果为0
* 129 --- 10000001
* 128 --- 10000000
* -------------------
* 10000000 --- 128
*/
System.out.println("a 和b 与的结果是:" + (a & b));
/**
* | --- 或运算符
* 两个位只要有一个为1,那么结果就是1,否则就为0
* 129 --- 10000001
* 128 --- 10000000
* --------------------
* 10000001 --- 129
*/
System.out.println("a 和b 与的结果是:" + (a | b));
/**
* ~ --- 非运算符
* 如果位为0,结果是1,如果位为1,结果是0
* 129 --- 10000001
* ------------------
* 01111110 --- -130
*
* 128 --- 10000000
* -------------------
* 01111111 --- -129
*/
System.out.println((~a) + "a ; " + (~b));
/**
* ^ --- 异或运算符
* 两个操作数的位中,相同则结果为0,不同则结果为1
* 129 --- 10000001
* 128 --- 10000000
* ------------------------
* 00000001 --- 1
*/
System.out.println((a^b));
/**
* >>> --- 右移运算符
* 将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0,其实右移n 位,就相当于除上2 的n 次方。
* 128 --- 10000000
* ---------------------
* 100000
* 00100000 --- 32
*/
System.out.println(128>>>2);
/**
* << --- 左移运算符
* 运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零。其实,向左移n 位,就相当于乘上2 的n 次方
* 128 --- 10000000
* ---------------------
* 1000000000 -- 512
*
*/
System.out.println(128<<2);
/**
* >> --- 帶符号右移运算符
* 运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1
* 128 --- 10000000
* ---------------------
* 100000 --- 32
* 00100000
*
* -128 --- -01111111
* ----------------------
* -011111 --- -32
* -11011111
*/
System.out.println(-128>>2);
}
}