文件操作---二进制

来源:互联网 发布:js 歌手 编辑:程序博客网 时间:2024/06/07 02:11

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;     }} 


1 0
原创粉丝点击