* 一个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) {
byte
[]
b
= new byte
[4]
;
b
[0]
= (byte) ((i >>>
24
) &
0
xFF);
b
[1]
= (byte) ((i >>>
16
) &
0
xFF);
b
[2]
= (byte) ((i >>>
8
) &
0
xFF);
b
[3]
= (byte) (i &
0
xFF);
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
这就是本期的运算符讲解 感觉有用就点个赞吧 如果有错误或更好的方法评论区请多多指出 相互学习共同进步
- 2171
-
yeyan1996
JavaScript