* 一个int是4个byte 1个byte是8个bit 所以要右移位三次 每次8位 * 如 1111 1111 1010 1010 0101 0101 0000 0000 * [1111 1111, 10101 010, 0101 0101, 0000 0000] private static byte [] toByteArr (int i) { // 因为一个 int 类型是 4个 byte 所以这里要开辟 4位 空间 byte [] b = new byte [4] ; // 16 进制的 0xFF 也就是 2进制中的 1111 1111 这一步是获得前8位的二进制数据 b [0] = (byte) ((i >>> 24 ) & 0 xFF); // 同理 这一步是获取 第9位到第16位的二进制数据 b [1] = (byte) ((i >>> 16 ) & 0 xFF); // ... b [2] = (byte) ((i >>> 8 ) & 0 xFF); b [3] = (byte) (i & 0 xFF); // 因为 int 是 32 个 bit 所以到这里就获取到 字节数组了 return b ;

byte数组 转 int

* 一个int 4个字节 每个字节8位 所以要左移位三次 每次8位 private static int toInt(byte [] b ) { // 合并规则主要看 如何转的 byte数组 // 如果转 byte [] 是从前 8 位右移 那么转 int 需要从 ( 32 - 8 ) 位开始左移 return ( b [0] & 0 xFF) << 24 | ( b [1] & 0 xFF) << 16 | ( b [2] & 0 xFF) << 8 | ( b [3] & 0 xFF);

int 转 byte数组原理

比如要转的数为 9 那么需要先转为2进制 0000 0000 0000 0000 0000 0000 0000 1001 第一次右移24位 获得到 0000 0000 & 1111 1111 = 0 第二次右移16位 获得到 0000 0000 & 1111 1111 = 0 第三次右移8位 获得到 0000 0000 & 1111 1111 = 0 第四次无需移位 获得到 0000 1001 & 1111 1111 = 0b1001 = 9 最终结果为: [ 0 , 0 , 0 , 9 ]

byte数组 转 int 原理

反推 [ 0 , 0 , 0 , 9 ] 获得到第一个字节的二进制值 0 = 0000 0000 0000 0000 0000 0000 0000 0000 获得到第二个字节的二进制值 0 = 0000 0000 0000 0000 0000 0000 0000 0000 获得到第三个字节的二进制值 0 = 0000 0000 0000 0000 0000 0000 0000 0000 获得到第四个字节的二进制值 0 = 0000 0000 0000 0000 0000 0000 0000 1001 第一个字节左24移位 并且 & 0xFF 获得到 0000 0000 | 第二个字节左16移位 并且 & 0xFF 获得到 0000 0000 | 第三个字节左8移位 并且 & 0xFF 获得到 0000 0000 | 第四个字节无需移位 并且 & 0xFF 获得到 0000 1001 合并结果 0000 0000 0000 0000 0000 0000 0000 1001 = 9 public static void main(String [] args) { byte [] bytes = toByteArr( 9 ) ; System.out.println(Arrays.toString(bytes)) ; System.out.println(toInt(bytes)) ; System.out.println() ; byte [] bytes1 = toByteArr(- 65555 ) ; System.out.println(Arrays.toString(bytes1)) ; System.out.println(toInt(bytes1)) ; System.out.println() ; byte [] bytes2 = toByteArr(Integer.MAX_VALUE) ; System.out.println(Arrays.toString(bytes2)) ; System.out.println(toInt(bytes2)) ; System.out.println(Integer.MAX_VALUE) ;
A:\Work\jdk1.8\bin\java.exe ...
[0, 0, 0, 9]
[-1, -2, -1, -19]
-65555
[127, -1, -1, -1]
2147483647
2147483647
Process finished with exit code 0

  这就是本期的运算符讲解  感觉有用就点个赞吧 如果有错误或更好的方法评论区请多多指出  相互学习共同进步    

  •