// 提取低位的半个字节
System.out.println("01010101 & 0x00ff 结果为"+(0x55 & 0x0f));
// 按位或
// 在socket通信DataInputStream.readUnsignedShort()中用来合并byte
System.out.println("00001111 | 11110000 结果为:"+(15 | 15 << 4));
// 按位亦或
System.out.println("01011100 ^ 11111010 结果为:"+(0x5c ^ 0xfa));// 10100110 oxa6
System.out.println(Integer.toBinaryString(0xaf));
int a = ((int)0x8a)|((int)0x05);
System.out.println(Integer.toBinaryString(a)+"\na:"+(-1|a));
System.out.println(Integer.toBinaryString((int)((0x87 - 0x01) ^ 0xff))+"十进制:-"
+ ""+(int)((0x87 - 0x01) ^ 0xff));
System.out.println(Integer.toBinaryString(1));
// 数值取反
System.out.println(Integer.toBinaryString(~(9 - 0x00000001 )));
System.out.println(Integer.toBinaryString(-9));
// 所有整数在内存中均用补码表示
// 0x8f = 1000 1111 ; 1000中 1为符号位,表示负数 ;
// 1000 1111 (补码) ---> 1000 1110 (反码) ----> 1111 0001 (原码)
// 所以 0x8f 表示 -(7*16 + 1) = -113
System.out.println((byte)0x8f);
short s = (short) 0x80ff;
// 0x80ff --> 10000000 11111111 (补码,符号位1,表示负数) ---> 10000000 11111110 (反码)
// ---> 11111111 00000001 (原码) = -(7*16^3 + 15*16^2 +1) = 28672 + 3840 + 1
System.out.println("0x80ff :\t"+s);
// 输出 0xc5 = 1100 0101 符号位为1; 补码11000101-->反码11000100-->原码10111011= -(3*16+11) = -59
System.out.println("0xc5 :\t"+(byte)0xc5);
// 符号右移 高位补0,最高位为0
System.out.println("0xc5>>1:\t"+(byte)(0xc5>>1));
// 无符号右移 高位补1,最高位为0
System.out.println(Integer.toBinaryString((((byte)0xc5)>>>1)).length());
System.out.println((byte)0xc5>>>1);
//System.out.println(Float.MIN_VALUE);