package ice.snowflake.test;
import java.util.logging.Logger;
//https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Expressions_and_Operators
public class BitwiseOperatorTest {
static Logger log = Logger.getLogger(BitwiseOperatorTest.class.getName());
public static void main(String[] args) {
Integer a = 15;
Integer b = 9;
Integer c = -10;
Integer d = Integer.MAX_VALUE;
Integer e = Integer.MIN_VALUE;
p("非逻辑运算");
p(Integer.toBinaryString(a) + " 正整数a的2进制值"); //1111
p(Integer.toBinaryString(~a) + " 正整数a进行非运算后的2进制值,首位符号位变成了1,变成了负整数"); //11111111111111111111111111110000
p(Integer.toBinaryString(c) + " 负整数c的2进制值,以补码的方式表示"); //11111111111111111111111111110110
p(Integer.toBinaryString(~c) + " 负整数c进行非运算后的2进制值,首位符号位变成了0,变成了正整数"); //1001
p("两个正数逻辑操作——————————————————————————");
p(Integer.toBinaryString(a) + " 正整数a的2进制值"); //1111
p(Integer.toBinaryString(b) + " 正整数b的2进制值"); //1001
p(Integer.toBinaryString(a & b) + " & 两个整数与"); //1001 与,两者都为则返回1
p(Integer.toBinaryString(a | b) + " | 两个整数或"); //1111 或,有一个为1,则返回1
p(Integer.toBinaryString(a ^ b) + " ^ 两个整数异或"); //110 异或,两者不一样则返回1
p("两个不同符号数逻辑操作——————————————————————————");
p(Integer.toBinaryString(a) + " 正整数a的2进制值"); //1111 正整数a的2进制值
p("0000000000000000000000000000" + Integer.toBinaryString(a)
+ " 正整数a的2进制值,左侧补满0,好比较"); //00000000000000000000000000001111 正整数a的2进制值,左侧补满0,好比较
p(Integer.toBinaryString(c) + " 负整数c的2进制值"); //11111111111111111111111111110110 负整数c的2进制值
p(Integer.toBinaryString(a & c) + " & 与"); //110 & 与
p(Integer.toBinaryString(a | c) + " | 或"); //11111111111111111111111111111111 | 或
p(Integer.toBinaryString(a ^ c) + " ^ 异或"); //11111111111111111111111111111001 ^ 异或
p("移位运算");
p("正整数——————————————————————————");
p(Integer.toBinaryString(d) + " 正整数d"); //1111111111111111111111111111111 正整数d
p("0"+Integer.toBinaryString(d) + " 正整数d,补充左侧符号位"); //01111111111111111111111111111111 正整数d,补充左侧符号位
p(Integer.toBinaryString(d >> 2) + " 正整数右移两位"); //11111111111111111111111111111 正整数右移两位
p(Integer.toBinaryString(d >>> 2) + " 正整数无符号右移两位"); //11111111111111111111111111111 正整数无符号右移两位
p(Integer.toBinaryString(d << 2) + " 正整数左移两位"); //11111111111111111111111111111100 正整数左移两位
p("负整数——————————————————————————");
p(Integer.toBinaryString(e) + " 负整数e"); //10000000000000000000000000000000 负整数e
p(Integer.toBinaryString(e >> 2) + " 负整数右移两位"); //11100000000000000000000000000000 负整数右移两位
p(Integer.toBinaryString(e >>> 2) + " 负整数无符号右移两位"); //100000000000000000000000000000 负整数无符号右移两位
p(Integer.toBinaryString(e << 2) + " 负整数左移两位"); //0 负整数左移两位
}
public static void p(Object msg) {
System.out.println(msg);
}
/* public static void p(String msg){
log.info(msg);
}*/
}