本人学习地址:JAVA自学网站HOW2J
package operateTest;
//import java.util.Scanner;
public class OperateTest {
public static void main(String[] args) {
int a = 123;
String b = Integer.toBinaryString(a);
System.out.println(a+"的二进制是"+b);
String c = Integer.toBinaryString(~a);
System.out.println(a+"的二进制取反后为"+(c));// int : 4 byte = 4 * 8 = 32 bit
System.out.println(a^0);//任何数与0异或的值为它本身
System.out.println(a^a);//任何数与自己异或的值为0
//异或(^),同位上,异:1,同:0
int v = 6;
int w = -9;
String sv,sw,sv1,sv2,sw1,sw2;
sv = Integer.toBinaryString(v);
sw = Integer.toBinaryString(w);
int v1 = v >> 1;
int w1 = w >> 1;
sv1 = Integer.toBinaryString(v1);
sw1 = Integer.toBinaryString(w1);
int v2 = v >>> 1;
int w2 = w >>> 1;
sv2 = Integer.toBinaryString(v2);
sw2 = Integer.toBinaryString(w2);
System.out.println(v+"的二进制是"+sv);
System.out.println(w+"的二进制是"+sw);
System.out.println(v+"带符号右移一位的二进制是"+sv1+",变为"+v1);
System.out.println(w+"带符号右移一位的二进制是"+sw1+",变为"+w1);
System.out.println(v+"不带符号右移一位的二进制是"+sv2+",变为"+v2);
System.out.println(w+"不带符号右移一位的二进制是"+sw2+",变为"+w2);
int i = 3; // 二进制是11
int j = 2; // 二进制是10
int c1= ((i | j) ^ (i & j)) << 2 >>> 1;
//3^2 = 1 (01),1<<2 = 2 (100),4>>>1 = 2 (10)
System.out.println(c1);
}
>>为带符号右移,>>>为不带符号右移
当带符号右移(>>)时,第一位原来是什么就补什么,
负数原来第一位是1,右移后补1,
正数原来第一位0,右移补0,
所以带符号右移数字的符号不变;
但是,当不带符号右移(>>>)时,负数移动后,第一位前会补0,
负数就会变成一个正数
对于左移,无带不带符号之分,
不管是正数还是负数,移位后最左端都是补0,(没有不带符号左移)