二进制基础

1 进制转换

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

2 位运算

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3 JDK 内置的进制转换

这里写图片描述

package com.amoscxy;

public class RadixMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 十进制转为其它进制
        System.out.println(Integer.toBinaryString(112)); // 二进制
        System.out.println(Integer.toOctalString(112)); // 八进制
        System.out.println(Integer.toHexString(112)); // 十六进制

        // 其它进制转化成十进制
        System.out.println(Integer.parseInt("111001",2)); // 二进制
        System.out.println(Integer.parseInt("27",8)); // 八进制
        System.out.println(Integer.parseInt("A8",16)); // 十六进制  
    }
}

4 Java 中的进制

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

package com.amoscxy;

public class Convert {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // int型与字节数组
        byte[] arr = Convert.int2Bytes(8143); // int转化为字节数组
        System.out.println(arr[0]+","+arr[1]+","+arr[2]+","+arr[3]);
        System.out.println(Convert.bytes2int(arr)); // 字节数组转化为int

        // long型与字节数组
        arr = Convert.long2Bytes(8143); // long转化为字节数组
        System.out.println(arr[0]+","+arr[1]+","+arr[2]+","+arr[3]);
        System.out.println(Convert.bytes2long(arr)); // 字节数组转化为long

        // 字符串与字节数组
        String  describe = "我每天都练功,我天下无敌!";
        byte[] barr = describe.getBytes(); // 字符串转化为字节数组

        String des = new String(barr); // 字节数组转化为字符串
        System.out.println("des:"+des);
    }

    /**
     * int转化为字节数组byte[]
     * @param id
     * @return
     */
    public static byte[] int2Bytes(int id)  {
        byte[] arr = new byte[4];
//      arr[0] = (byte)((id>>0*8)&0xff);
//      arr[1] = (byte)((id>>1*8)&0xff);
//      arr[2] = (byte)((id>>2*8)&0xff);
//      arr[3] = (byte)((id>>3*8)&0xff);
        for(int i =0;i<arr.length;i++) {
            arr[i] = (byte)((id>>i*8)&0xff);
        }
        return arr;
    }

    /**
     * 字节数组byte[]转化为int
     * @param arr
     * @return
     */
    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;
        int result = 0;
        for(int i = 0;i<arr.length;i++) {
            result +=(int)(arr[i]&0xff)<<i*8;
        }
        return result;
    }

    /**
     * long转化为字节数组byte[]
     * @param id
     * @return
     */
    public static byte[] long2Bytes(long id)  {
        byte[] arr = new byte[8];
//      arr[0] = (byte)((id>>0*8)&0xff);
//      arr[1] = (byte)((id>>1*8)&0xff);
//      arr[2] = (byte)((id>>2*8)&0xff);
//      arr[3] = (byte)((id>>3*8)&0xff);
        for(int i =0;i<arr.length;i++) {
            arr[i] = (byte)((id>>i*8)&0xff);
        }
        return arr;
    }

    /**
     * 字节数组byte[]转化为long
     * @param arr
     * @return
     */
    public static long bytes2long(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;
        int result = 0;
        for(int i = 0;i<arr.length;i++) {
            result +=(long)(arr[i]&0xff)<<i*8;
        }
        return result;
    }
}

输出:

-49,31,0,0
8143
-49,31,0,0
8143
des:我每天都练功,我天下无敌!

推荐阅读:
位运算的威力:http://blog.csdn.net/iukey/article/details/7195265
大小端详讲:http://blog.csdn.net/zhaoshuzhaoshu/article/details/37600857

猜你喜欢

转载自blog.csdn.net/amoscxy/article/details/78828520