//按位与运算& System.out.println(0&0);//0 System.out.println(0&1);//0 System.out.println(1&1);//1 System.out.println("==========="); //按位或运算符| System.out.println(0|0);//0 System.out.println(0|1);//1 System.out.println(1|1);//1 System.out.println("==========="); //异或运算符^ System.out.println(0^0);//0 System.out.println(0^1);//1 System.out.println(1^1);//0 System.out.println("==========="); //取反运算符~ //部分要点: //什么是取反:取反就是0=>1 1=>0 //什么是补码:正数的补码是其反码,负数的补码为其反码+1,例5的二进制为0 0101,而0 0101的补码是1 1010,-5的二进制是1 0101,而1 0101的补码是1 1011 //什么是原码:规定正数的补码与原码相同,负数的原码是其反码+1 //--------------------------------------------------------- //6为正数,二进制为 0 0110 (第一个0代表正负) //然后计算补码,即1 1001 //求原码,对后4位进行按位取反,即 1 0110 //然后对二进制进行补码+1操作,即 1 0111 //1010转成十进制为7,加上前面的负号,得-7 //如6为正数,其二进制为110,取反后为001,补码右边+1为1010,原来6为正,取反为负,得-2 //---------------------------------------------------------- System.out.println(~6);//-7 System.out.println(~42);//-43 System.out.println("==========="); //左移运算符<<(即向左移动,右边补0) //如2的二进制为10,若2<<2,则1000,也就是十进制8,同理若2<<3,则10000,也就是十进制16,根据规律可以看出n<<m=n*(2^m) System.out.println(15<<2);//60: 15*(2^2) //右移有符号运算符>>(即向右移动,但左边补0还是1需要看原来的数是正的还是负的) System.out.println(2>>2); //0(右边移除的数将被丢弃) System.out.println(-8>>3); //-1