美文网首页
4.1二进制基础(文件操作)

4.1二进制基础(文件操作)

作者: 夏沫xx | 来源:发表于2016-09-24 22:21 被阅读0次

    1、 十进制和二进制的由来

    2、 进制转换

    什么是二进制
    十进制转二进制采用短除2法
    二进制怎么表示一个数
    计算机为什么要用二进制

    3、 位运算

    运算符 运算 示例
    & 与运算 6&3=2
    l 或运算 6 l 3=7
    ^ 异或运算 6^3=5
    ~ 反码 ~6=-7
    << 左移 3<<2=12 322=12
    >> 右移 3>>1=1 3/2=1
    >>> 无符号右移 3>>>1=1 3/2=1
    • 按位与&
      两位全为1,结果才为1
      0&0=0;0&1=0;1&1=1;51&1=1
      位运算的特殊用法
      1、清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值与,结果为零。
      2、取一个数中指定位
      设X=10101110,取X的低4位,用X&00001111=00001110即可得到
      方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位
    • 按位或|
      只要有一个为1,结果就为1
      51|5, 即0011 0011|0000 0101=0011 0111,因此51|5=55
      或运算的特殊用法
      常用来对一个数据的某些位 置1
      方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为0。此数与X相或可是X中的某些位 置1.
      将X=1010 0000的低4位 置1,用X|0000 1111=1010 1111即可得到
    • 按位异或^
      两个相应位为 异(值不同),则该位结果为1,否则为0
      00=0;01=1;51^5,即0011 0011^0000 0101=0011 0110,因此51^5=54
      异或运算的特殊用途
      1、使特定位翻转找一个数,对应X要翻转的各位,概述的对应位为1,其余位为0,此数与X对应位异或即可。
      X=1010 110,
      2、保留原值
      X^0000 0000=1010 1110
      两个变量交换值的方法
      1、借助第三个变量来实现
      C=A;A=B;B=C;
      2、利用加减法实现两个变量的交换
      A=A+B;B=A-B;A=A-B;
      3、用位异或运算来实现,也是效率最高
      原理:利用一个数异或本身等于0和异或运算符合交换律
      A=AB;B=AB;A=A^B;
    • 取反运算~
      对一个二进制数按位取反,即将0变1,1变0
      1=0;0=1;
    • 左移运算<<
      将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
      2<<1=4;
      若左移是舍弃的高维不包含1,则每左移一位,相当于该数乘以2
      11(1011)<<2=44
    • 右移运算符>>
      将一个数的各二进制位全部右移若干位,整数左补0,负数左补1,右边丢弃。操作数每右移一位,相当于该数除以2
      4>>2=1
      -14(1111 0010)>>2=-4(1111 1100)
    • 无符号右移运算>>>
      各个位向右移 指定的位数。右移后左边空出来的位用零来填充。移出右边的位被丢弃
      -14>>>2
      负数以正值的补码形式表示
      原码:
      一个整数按照绝对值大小转换的二进制数称为原码
      例:00000000 00000000 00000000 00001110是14的原码
      反码:
      将二进制数按位取反,所得的新二进制数称为原二进制数的反码
      补码:
      反码加1称为补码
      例:
      -14(11111111 11111111 11111111 11110010)<<2=
      (11111111 11111111 11111111 11001000)=?
      分析:只需要该补码的原码对应的正值,然后取相反数
      1、补码减1得到反码(11000111)
      2、补码取反得到原码(即该负数的正值)(00111000)
      3、计算正值
      4、取相反数

    4 、 JDK内置的进制转换

    public class RadixMain {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //十进制转为其他进制
            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));//十六进制
        }
    
    }
    
    

    5、 java中的进制

    java中数据类型
    基本类型四种

    • int数据类型:byte(8bit,-128~127)、short(16bit)、int(32bit)、long(64bit)
    • float数据类型:单精度(32bit float)、双精度(64bit double)
    • boolean类型变量的取值有:true、false
    • char数据类型有:unicode字符,16位

    对应的类型:
    Integer、Float、Boolean、Character、Double、Short、Byte、Long
    数据类型 转换 字节

    Paste_Image.png
    • 大小端
      小端法(Little-Endian)
      低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端
      大端法(Big-Endian)
      高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端
      例:
      32bit宽的数0*12 34 56 78
    Paste_Image.png

    字符串->字节数组
    String s;byte[] bs=s.getBytes();
    字节数组->字符串
    byte[] bs=new byte[int];
    String s=new String(bs);或
    String s=new String(bs,encode);//encode指编码方式“gb2312,utf-8”

    package sometime;
        /*
         * int转化为byte[]
         */
    public class Convert {
        public static byte[] int2Bytes(int id){
            byte[] arr=new byte[4];
            arr[0]=(byte) ((byte)(int)(id>>0*8)&0xff);
            arr[1]=(byte) ((byte)(int)(id>>1*8)&0xff);
            arr[2]=(byte) ((byte)(int)(id>>2*8)&0xff);
            arr[3]=(byte) ((byte)(int)(id>>3*8)&0xff);
            return arr;
        }
        /*
         * 转化 byte[]为int
         */
        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)<<2*8);
            return rs0+rs1+rs2+rs3;
        }
        public static void main(String[] args){
            // TODO Auto-generated method stub
            byte[] arr=Convert.int2Bytes(8143);
            System.out.println(arr[0]+","+arr[1]+","+arr[2]+","+arr[3]);
            System.out.println(Convert.bytes2Int(arr));
            }
    }
    

    相关文章

      网友评论

          本文标题: 4.1二进制基础(文件操作)

          本文链接:https://www.haomeiwen.com/subject/amjuettx.html