具体内容如下
public class Demo {
@Test
public void test1() {
//java与操作:两个操作数中都为1,结果才为1,否则结果为0
int a = 5; //二进制表示0000 0101
int b = 6; //二进制表示0000 0110
//故a&b => 0000 0100 => 十进制4
System.out.println("a和b与操作的结果是:" + (a & b));
}
@Test
public void test2() {
//java或操作:两个位只要有一个为1,那么结果就是1,否则就为0
int a = 5; //二进制表示0000 0101
int b = 6; //二进制表示0000 0110
//故a|b => 0000 0111 => 十进制7
System.out.println("a和b或操作的结果是:" + (a | b));
}
@Test
public void test3() {
//java非操作:一个二进制数中,0变1,1变0
int a = 1; //二进制表示00000001
/*
实际上int占32位: 00000000 00000000 00000000 00000001
故取反后: 11111111 11111111 11111111 11111110
但是计算机中的数是用补码表示的
对于正数:原码 = 反码 = 补码
对于负数:反码 = 将原码除符号位外取反
补码 = 将反码+1
对于-2:
原码:10000000 00000000 00000000 00000010
反码:11111111 11111111 11111111 11111101
补码:11111111 11111111 11111111 11111110
可以发现对1取反后,与-2的补码一样,故1取反的值为-2
*/
System.out.println("a做非操作的结果是:" + (~a));
}
@Test
public void test4() {
//java异或操作:两个位数相同则结果为0,不同则结果为1
int a = 5; //二进制表示0000 0101
int b = 6; //二进制表示0000 0110
//故a^b => 0000 0011 => 十进制3
System.out.println("a和b或操作的结果是:" + (a ^ b));
}
@Test
public void test5() {
//左移<< :左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0)
int a = 2; //二进制为 0000 0010
int b = a<<1; //则b为 0000 0100 十进制为4
System.out.println("a向左移1位的结果是:" + b);
}
@Test
public void test6() {
//有符号右移 >> :将对应的数向右移动指定的位数。
//使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1.
int a = 2; //二进制为 0000 0010
int b = a>>1; //则b为 0000 0001 十进制为1(最高位补0)
System.out.println("a向右移1位的结果是:" + b);
}
@Test
public void test7() {
//无符号右移 >>> :将对应的数向右移动指定的位数,一律补0。
int a = 2; //二进制为 0000 0010
int b = a>>>1; //则b为 0000 0001 十进制为1(最高位补0)
System.out.println("a向右移1位的结果是:" + b);
}
}