package test; /** * ^的运算方法是 相同为0,相反为1 * |的运算方法是 有1则为1 * &的运算方式是 有0则为0 * ~的运算方法是 求反,负数的二进制表示就是该负数的绝对值的二进制数按位取反再加一 * >>n的运算方式 右移n位,正填0,负填1,正数x/(2^n) * <<n的运算方式 左移n位,正填0,负填1,正数x*(2^n) * >>>n的运算方式 不带符号右移n位,填0,32位系统是该数前补足32个0,64位补足64个0 */ public class TestOperation { public static void main(String[] args) { System.out.println(1^2); /* * 1 001 * 2 010 * 3 011 */ System.out.println(4^5); /* * 4 100 * 5 101 * 1 001 */ System.out.println(15^21); /* * 15 01111 * 21 10101 * 26 11010 */ System.out.println("-----"); System.out.println(1|2); /* * 1 001 * 2 010 * 3 011 */ System.out.println(4|5); /* * 4 100 * 5 101 * 5 101 */ System.out.println(15|21); /* * 15 01111 * 21 10101 * 31 11111 */ System.out.println("-----"); System.out.println(1&2); /* * 1 001 * 2 010 * 0 000 */ System.out.println(4&5); /* * 4 100 * 5 101 * 4 100 */ System.out.println(15&21); /* * 15 01111 * 21 10101 * 5 00101 */ System.out.println("-----"); System.out.println(~5); /* * 5 00000101 *-6 11111010 * 00000101+1 * */ System.out.println(~21); /* * 21 00010101 *-22 11101010 * 00010101+1 * */ System.out.println(~-16); /* *-16 11110000 * 15 00001111 */ System.out.println("-----"); System.out.println(15>>2); /* * 15 01111 * 3 011 */ System.out.println("-----"); System.out.println(15<<2); /* * 15 0001111 * 60 0111100 */ System.out.println("-----"); System.out.println(-5>>>2); /* * 5 00000101 * -5 11111011 * 2^32右移2个0 */ System.out.println(-5>>>30); /* * -5 11111011 * 2^32右移30个0 * 00000011 */ } }