今天遇到一个有趣的问题,若是咱们使用byte数组去存储int或者dobble数据会怎么样数组
首先咱们须要了解的是计算机是经过补码的形式存储值得,这样更方便操做spa
采用补码的缘由或好处以下,采用补码运算具备以下两个特征:
1)由于使用补码能够将符号位和其余位统一处理,同时,减法也能够按加法来处理,即若是是补码表示的数,无论是加减法都直接用加法运算便可实现。
2)两个用补码表示的数相加时,若是最高位(符号位)有进位,则进位被舍弃。
这样的运算有两个好处:
1)使符号位能与有效值部分一块儿参加运算,从而简化运算规则。从而能够简化运算器的结构,提升运算速度;(减法运算能够用加法运算表示出来。)
2)加法运算比减法运算更易于实现。使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。设计
1.int转byte[]code
那么好比咱们使用byte[] 存储一个int 值,咱们知道int有4个字节,那么咱们就须要将4个长度的bye数组来存储,那么每个位置上存储int类型的一个字节位上的数值,思路大体是这样,那么这样就存在着一问题,是高位存储仍是,下位存储,通常采用高位,由于咱们将 byte数组index大的来存储,int的第一个8位,话不杜说上代码blog
public static void int2Byte(int db) { byte[] b = new byte[4];//咱们就使用4长度数组,方便理解 for(int i=0;i<4;i++){ b[4-1-i] = (byte)((db >> 8*i)& 0xff)) } }
此处咱们与一个 0xff(00000000 00000000 00000000 11111111),前3个字节都置为00000000,最后一个字节保存不变,其实这一步并不须要,由于这里byte只会截取后八位,因此不必;class
2.byte[]转int数据
public static byte2int( bye[] arr){ int sun=0; for(int j=0;j<4;j++) { int n = (int)arr[j]& 0xff; n <<= (4-j) * 8; sum += n; } }
这里的0xff就很是用必要了,可使前三个字节变成000000000000;
static