位运算符首先必须知道数字在计算机中的存储格式。 二进制、正数(原码、补数)、负数以补数形式存在。 要进行位运算,首先把数字变换为其原代码形式,然后对反码,再对补数、补数进行位运算,然后把结果变换为反码,再变换为原代码,再变换为十进制。
如果与运算符对应比特都是1,则结果为1,否则为0
publicstaticvoidmain (string [ ] args ) { int n=2; int m=3; //n :0010//m :0011//:---/0010 system.out.println (nm ); //2 } |或运算符如果相应的位都为0,则结果为0,否则为1
publicstaticvoidmain (string [ ] args ) { int n=2; int m=3; //n :0010//m :0011//|:----/0011 system.out.print ln (n|m ); } ^异或运算符如果对应的位值相同,则结果为0,否则为1
publicstaticvoidmain (string [ ] args ) { int n=2; int m=6 //n :0010//m :0110//|:----/0100 system.out.println (n ^ m ); } ~运算符以外乘以1再乘以-1
publicstaticvoidmain (string [ ] args ) {byte p=1; byte p2=-1; //对于正数p,结果为1*-1system.out.println(~p ); //负数p时,结果为1*-1system.out.println(~p2 ); int num=987654321; //- 987654322 system.out.print ln (~num ); }左移运算符按位左移运算符。 左操作数按位向左移动右操作数指定的位数。
mn相当于m乘以2的n次方
对于//2*2的3次方byte b=2 3; system.out.println(b; //16//4: 00000100.//00010000.system.out.print ln (4); //16//-4336010000100|1111101100//11000000|11011111|10100000 system.out.print ln (-4 ); //-32右移运算符按位右移运算符。 左操作数按位向右移动右操作数指定的位数。
mn除以m的2的n次方得到的值
//- 20:10010100|11101011|11101100//-20向右移动三位1111111101|11111100|100000011 system.out.println (-203 ); //-3按无符号位右移位右移补零操作符。 左操作数的值向右移动右操作数指定的位数,移动的空位用零填充。
byte b=-8; //-8替换为int型补码,右移,左高位填零,符号位//b :10001000|11111011|1111111111110.//111111111111111111111111111111111111110