Java 负数表示?如何将10进制转换为16进制,2进制?使用ByteBuffer将double、short、int存入Byte[]

目录

        • Java 的负数表示,第一位为负数,其他取反码
        • 10进制转换为16进制,2进制
        • 使用ByteBuffer将double、short、int存入Byte[]

Java 的负数表示,第一位为负数,其他取反码
  • -7可以表示为10000111,最高位的1代表负号,它的反码是除去符号位各位取反为11111000
  • 对应的将各种进制转换为byte,起始底层二进制都不影响
    • (byte)255 00000001
    • (byte)0x80 11111111
    • (byte) 128 10000000
    • (byte)-128 10000000
    • -128 10111111
byte[] b = new byte[]{(byte)0x01,-1,(byte)255,(byte)0x80,(byte) 128,-128};
System.out.println(Arrays.toString(b));
System.out.println(Integer.toBinaryString((byte) 0x01));
// -7可以表示为10000111,最高位的1代表负号,它的反码是除去符号位各位取反为11111000
// java的负数二进制表示
//(byte)0x01 (byte)255 (byte)0x80 (byte) 128  -128
// 00000001  11111111   10000000   10000000  10111111
// [1,      -1,          -128,     -128, -128   ]
10进制转换为16进制,2进制
 byte b = -1;
 System.out.println("16进制:" + String.format("%02x ", b) ); // 10进制转换为16进制    %02x 是一个格式化字符串,用于将一个整数以十六进制格式输出,并在结果的前面补0,直到结果长度为2。
 System.out.println("二进制:"+ Integer.toBinaryString(b)); // 10进制转换为2进制
使用ByteBuffer将double、short、int存入Byte[]
  • 打印byte[] 时,Java里默认使用二进制表示

    1. 构造一个byte[]数组,存入short(2byte)、int(4byte)、double(8byte)
    2. 16进制,2进制,十进制的转换
    short intNumber = 99;
    byte[] b1 = ByteBuffer.allocate(2).putShort(intNumber).array();
    byte[] doubleByte = ByteBuffer.allocate(8).putDouble(9.99).array();
    byte[] byteArray = new byte[15];
    byteArray[0] = (byte) 0x01;
    byteArray[1] = (byte) 255;
    byteArray[2] = (byte) 0x80;
    byteArray[3] = (byte) 128;
    byteArray[4] = (byte) -128;
    // 存入short的byte
    byteArray[5] = b1[0]; // 或者 (byte) ((intNumber >> 8) & 0xFF) 这就是取short的第一个字节
    byteArray[6] = b1[1]; // 或者 (byte) (intNumber & 0xFF) 取short的第二个字节
    // 存入double的byte
    byteArray[7] = doubleByte[0];
    byteArray[8] = doubleByte[1];
    byteArray[9] = doubleByte[2];
    byteArray[10] = doubleByte[3];
    byteArray[11] = doubleByte[4];
    byteArray[12] = doubleByte[5];
    byteArray[13] = doubleByte[6];
    byteArray[14] = doubleByte[7];
    System.out.println(Arrays.toString(byteArray));
    
    for (byte b : byteArray) {
        System.out.println("=========================");
        System.out.println("默认输出十进制 byte: " + b );
        System.out.println("16进制:" + String.format("%02x ", b) ); // 10进制转换为16进制    %02x 是一个格式化字符串,用于将一个整数以十六进制格式输出,并在结果的前面补0,直到结果长度为2。
        System.out.println("二进制:"+ Integer.toBinaryString(b)); // 10进制转换为2进制
    }
    
    [1, -1, -128, -128, -128, 0, 99, 64, 35, -6, -31, 71, -82, 20, 123]
    =========================
    默认输出十进制 byte: 1
    16进制:01 
    二进制:1
    =========================
    默认输出十进制 byte: -1
    16进制:ff 
    二进制:11111111111111111111111111111111
    =========================
    默认输出十进制 byte: -128
    16进制:80 
    二进制:11111111111111111111111110000000
    =========================
    默认输出十进制 byte: -128
    16进制:80 
    二进制:11111111111111111111111110000000
    =========================
    默认输出十进制 byte: -128
    16进制:80 
    二进制:11111111111111111111111110000000
    =========================
    默认输出十进制 byte: 0
    16进制:00 
    二进制:0
    =========================
    默认输出十进制 byte: 99
    16进制:63 
    二进制:1100011
    =========================
    默认输出十进制 byte: 64
    16进制:40 
    二进制:1000000
    =========================
    默认输出十进制 byte: 35
    16进制:23 
    二进制:100011
    =========================
    默认输出十进制 byte: -6
    16进制:fa 
    二进制:11111111111111111111111111111010
    =========================
    默认输出十进制 byte: -31
    16进制:e1 
    二进制:11111111111111111111111111100001
    =========================
    默认输出十进制 byte: 71
    16进制:47 
    二进制:1000111
    =========================
    默认输出十进制 byte: -82
    16进制:ae 
    二进制:11111111111111111111111110101110
    =========================
    默认输出十进制 byte: 20
    16进制:14 
    二进制:10100
    =========================
    默认输出十进制 byte: 123
    16进制:7b 
    二进制:1111011
    

你可能感兴趣的:(java)