一.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);//中
}
}