本文共 2530 字,大约阅读时间需要 8 分钟。
1.二进制基础
二进制来源 中国----《周易》—八卦图 西方人发明的计算机—>西方人发明的二进制 西方人莱布尼茨发明的二进制,来源于一个中国朋友给他的一封信,信里有一张八卦图
2.二进制转换
57: 111001-------2^(6-1)+2^(5-1)+2^(4-1)+2(1-1)=32+16+8+1=57 十进制转换二进制: 采用短除2,倒排列余数; 8进制,适合12位和363位计算机系统,开头用0表示 16进制,开头用0X表示3.位运算
在特定情况下,计算方便,速度快,被支持面广
如果采用算数方法,速度过慢 (1)按位与& 0&0=0; 0&1=0; 1&0=0; 1&1=1; 作用用法清零:想要将一串数字上的一段单元变为0,则将其与一个相应位置上都是0的数做与运算即可;
取一个数的指定位置上的数值,
则将其与一个对应位置上都是1的数做与运算即可;
(2)按位或 |
只要有一个为1,结果就是1
0|0=0; 0|1=1; 特殊用法: 常用来对一个数据的某些位置1方法:和相应位是1的数做|运算
(3) 异或运算^
不同为1,相同为0; 特殊用途: 使特定位数上的数值翻转: 方法:与一个对应位为1,其余位是0的数值做异或运算,即可得到一般翻转的数值。 与0异或,保留原值, 两个变量交换值的方法: 借助第三变量来实现 利用加减法实现两个变量的交换 用异或运算来实现,也是效率最高的方法、 原理:利用一个数异或本身等于0和疑惑运算符合交换律 A=A^B; B=A^B; A=A^B; (4)取反运算~ 1~=0;0~=1; (5)左移运算<< 把一个对象的各个二进制位全部左移若干位,(左边的二进制丢弃,右边的补0) 2<<1=4; 若左移时舍弃的高位不包含1,则每次左移一位相当于该数乘以2 11(1011)<<2=44; (6) 右移运算>> 向右移动时候,正数左边补充0,负数左边补充1;右边丢弃;操作数每次向右移动一位,相当于该数除以2; (7)无符号>> 右移指定位数,左边突出的用0来补充,移动出来的右边的位被丢弃; 负数用其正值的补码形式表示原码:正数转化为二进制数
反码:原码按位取反补码:反码+1; -14(11111111 11111111 11111111 11110010)<<2 =(11111111 11111111 11111111 11001000) = (求补码的原码对应的正值,然后取相反数) JDK内置转换 十进制->其他进制 System.out.println(Integer.toBinaryString(112));//二进制 System.out.println(Integer.toHexString(112));//十六进制 System.out.println(Integer.toOctalString(112));//八进制 其他进制->十进制 System.out.println(Integer.parseInt(“111001”,2)); //二进制 System.out.println(Integer.parseInt(“27”,8)); //十六进制 System.out.println(Integer.parseInt(“A8”,16)); //八进制 如果码数写错,会抛出异常 Java中的数据类型 Java处理高层 跨平台中,用进制,文件读写、数据通信 int类型:byte(8bit)/int(32bit)/long(64bit) float类型 boolean(1bit) char(16bit) 数据类型转化为字节 大小端 小端法:低位字节放在内存的低地址端,即该值的起始地址,高位字节排放在内存的高地址端; 大端法:高位字节排放在内存的低地址端,即该值的起始地址,低位字节排放在内存的高地址端;import java.util.*;public class Main{ public static void main(String[] args) { //byte[] arr=Convert.int2Bytes(8143); //System.out.println(arr[0]+","+arr[1]+","+arr[2]+","+arr[3]); String describe="我是菜鸟"; byte[] barr=describe.getBytes(); System.out.println(barr); String des=new String(barr); System.out.println(des); } public static byte[] int2Bytes(int id) { byte[] arr=new byte[4]; arr[0]=(byte)((int)((id>>0*8)&0xff)); arr[1]=(byte)((int)((id>>1*8)&0xff)); arr[2]=(byte)((int)((id>>2*8)&0xff)); arr[3]=(byte)((int)((id>>3*8)&0xff)); return arr; } public static int bytes2Int(byte[] arr) { int rs0=(int)((arr[0]&0xff)<<0*8); int rs1=(int)((arr[1]&0xff)<<1*8); int rs2=(int)((arr[2]&0xff)<<2*8); int rs3=(int)((arr[3]&0xff)<<3*8); return rs0+rs1+rs2+rs3; }}