计算机的二进制规则

一.int和long转化为二进制输出结果

 

package day03;

public class Demo1 {
	public static void main(String[] args) {
		int i=0xf;//十六进制
		System.out.println(Integer.toBinaryString(i));//1111
		int a = -1;
		long l = -1l;
		System.out.println(Integer.toBinaryString(a));//32位
		System.out.println(Long.toBinaryString(l));//64位
		System.out.println(Long.toBinaryString(a));//64位
	}
}


二.调取int最大值跟最小值

 

 

 

 

package day03;

public class Demo2 {
	public static void main(String[] args) {
		int max = Integer.MAX_VALUE;//max=0x7fffffff——>2147483647
		System.out.println(max);
		System.out.println(Integer.toBinaryString(max));
		int min = Integer.MIN_VALUE;//min=0x80000000——>-2147483648
		System.out.println(min);
		System.out.println(Integer.toBinaryString(min));
	}
}


三.~——>取反符号,-n=~n+1,二进制的规则如下:

 

 

 

 

package day03;

public class Demo3 {
	public static void main(String[] args) {
		int n = 8;
		//n = 00000000 00000000 00000000 00001000——>显示栏显示1000
		//~n= 11111111 11111111 11111111 11110111——>-9
	//~n+1 = 11111111 11111111 11111111 11111000——>-8
		int m = ~n+1;
		System.out.println(n);
		System.out.println(Integer.toBinaryString(n));
		System.out.println(~n);
		System.out.println(Integer.toBinaryString(~n));
		System.out.println(m);
		System.out.println(Integer.toBinaryString(m));
		int i =100;
		//i = 00000000 00000000 00000000 01100100——>显示栏显示1100100
		//~i= 11111111 11111111 11111111 10011011
	//~i+1 = 11111111 11111111 11111111 10011100
		System.out.println(Integer.toBinaryString(i));
		System.out.println(~i);
		System.out.println(Integer.toBinaryString(~i));
		System.out.println(Integer.toBinaryString(~i+1));
	}
}


四.char类型是Unicode编码的整数

 

 

 

 

package day03;

public class Demo4 {
	public static void main(String[] args) {
		// char类型是Unicode编码的整数——>Unicode:一个符号一个数,将字符转换为数据!
		//Java char类型是Unicode3.2,65535个字符
		int i = 'm';
		System.out.println(i);//109
		int l = '敏';
		System.out.println(l);//25935
		int j = '馨';
		System.out.println(j);//39336
	}
}


五.互联网或者文件都是按照byte(8位数)进行数据传输的
字符数据在互联网(文件)传输时候必须拆分位byte(8位)进行传输
——>将字符数据拆分位byte数据的过程称为:编码
——>将byte数据重载合并为字符数据分过程称为:解码

1.与运算 & (逻辑乘法)——>两个二进制数字对其位,上下进行 & 运算

int n = 0x4eed;——>100111011101101
int m = 0x3f;——>111111
int k = n&m;——>截取n的后六位101101

2.或运算 | (逻辑加法)——>两个二进制数字对其位,上下进行 & 运算

int n = 0x2d;//101101
int m = 0x80;//10000000
int k = n|m;//10101101

3.>>>(逻辑右移位计算)
int n = 0x4eed;——>100111011101101
int m = n>>>6;——>100111011(右移六位,右边六位丢失)

4.<<(数学左移位计算)

优化计算为:n*8为——>n<<3
int n =110010;——>50
int m =n<<1;——>1100100——>100(左移一位,因为二进制所以变成两倍)

5.>>(数学右移位计算)
>>>与>>的差别
数学右移位>>,正数时候高位补0,负数高位补1
逻辑右移位>>>,正数时候高位补0,负数高位补0
正数时候因为二进制所以减小两倍50——>25
负数时候(二进制)数学右移位>>扩大两倍-50——>-25

6.UTF-8——>3字节编码:1110xxxx 10xxxxxx 10xxxxxx
——>解码

 

 

 

 

package day03;

public class Demo9 {
	public static void main(String[] args) throws Exception{
		int n = '中';//100111011101101
		int m = 0x3f;//111111
		int i = 0x80;//10000000
		int j = 0xf;//1111
		int k =0xe0;//11100000
		int b3 =n&m | i;
		int b2 =(n>>>6) & m | i;
		int b1 =(n>>>12) & j | k;
		//验证一下:new String(byte, 编码方案)
		//将bytes数据进行编码
		byte[] bytes = {
				(byte)b1,(byte)b2,(byte)b3,
				(byte)b1,(byte)b2,(byte)b3};
		String str = new String(bytes,"UTF-8");
		System.out.println(str);//中
		
		//解码
		int ch = (b1&0xf)<<12 | (b2&0x3f)<<6 | (b3&0x3f)<<0;
		System.out.println((char)ch);//中
	}
}

 

 

你可能感兴趣的:(Java基础API)