AllAboutBinary 关于二进制用法的总结

写法:

		int a = 0b11111111111111111111111111111110;   //2进制
		int b = 0xfffffffe;    //缩写为16进制 
		int c = 037777777776;  //缩写为8进制   从右边起三个一组  最大不超过7
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);

左右移符号一般用法及实际应用:

		System.out.println(a>>1);  //-1
		System.out.println(a<<1);  //-4
		System.out.println(a>>>1); //逻辑右移 最高位补零 得到 Integer.MAX
		System.out.println(Integer.MAX_VALUE);
		
		//应用
		RandomAccessFile raf = new RandomAccessFile("raf_p.dat", "rw");
		raf.write(a>>>24);
		raf.write(a>>>16);
		raf.write(a>>>8);
		raf.write(a);
		raf.seek(0);
		
		int b1=raf.read();
		int b2=raf.read();
		int b3=raf.read();
		int b4=raf.read();
		
		a = b1<<24|b2<<16|b3<<8|b4;
		System.out.println(a);      //-2
		
		raf.seek(0);
		
		System.out.println(raf.readInt());   //-2

补码机制的验证:

		long max=Long.MAX_VALUE;
		long min=Long.MIN_VALUE;
		System.out.println(Long.toBinaryString(max));  //63个1  最高位为0省略
		System.out.println(Long.toBinaryString(min));  //最高位为1 后面63个0
		System.out.println(Long.toBinaryString(-1));   //64个1
		System.out.println(Long.toBinaryString(-2));   //64个1   最后一位为0


取反对称机制的验证:

		//取反对称的验证  -n=~n+1
		System.out.println(max);
		System.out.println(-(~max+1));   //max
		
		System.out.println(~255+1);      //-255
		System.out.println(~(-128)+1);   //128
		
		System.out.println(-1);
		System.out.println(~1+1);        //-1
		
		System.out.println(min);      
		System.out.println(-(~min+1));   //min
		
		System.out.println(-min);        //仍为min
		System.out.println(~min+1);      //为-min?  结果仍为min

取余运算的高阶转换:

		//取余运算的高阶转换
		
		for (int i = 0; i < 100; i++) {
			System.out.print(i%16+",");  
			System.out.println(i&0xf);  //也可以写成15,4位掩码,上下完全一致
		}

Unicode的编码拼接:

		//Unicode的编码拼接
		System.out.println(Integer.toBinaryString('人'));
		//可知人的Unicode 16位编码为01001110 10111010
		int code = '人';
		//UTF-8“图纸”编码规则
		//1110XXXX  10XXXXXX  10XXXXXX       3字节编码
		//0xe0      0x80      0x80   
		
		//转换成3字节 utf-8编码
		int c1 = (code>>>12)|0xe0;
		int c2 = ((code>>>6)&0x3f)|0x80;
		int c3 = (code&0x3f)|0x80;
		
		//拼回
		int ch = ((c1&0xf)<<12)|((c2&0x3f)<<6)|(c3&0x3f);
		char human = (char)ch;
		System.out.println(human);

utf-8编码 rfc3629文档说明
https://datatracker.ietf.org/doc/rfc3629/

经典面试题:
在这里插入图片描述

原创文章 46 获赞 7 访问量 2090

猜你喜欢

转载自blog.csdn.net/EdwardWH/article/details/105022927