举例:
B9 转换成字节数组为 -73或者185
为什么如果是-73字节数组 再转回为16进制为 :0xFFFFFFB9,与原来的B9相差
解析:
在java里面
B9 转换成二进制为:
00000000 00000000 00000000 10110101
Int转换为Byte的过程,也是将Int里32个bit的前24个“砍掉”,只留下最后8个bit的过程 即为:10110101
因为byte里第一位为符号位,0为正,1为负,且负数均用补码表示
10110101转换成十进制可以有 -73,185代表字节数
如果是正整数
10110101=181
如果是负整数
10110101(补)=10111001(原)= -73 (10进制)
如果Byte第一位为1,Java会认为此数为负数,并做位扩展,加上24个1
那么
-73 为11111111 11111111 11111111 10110101 转换成16进制为:0xFFFFFFB9
解决方法:按位与运算,将负数转为正整数
按位与运算
-73 11111111 11111111 11111111 10110101 0XFF 00000000 00000000 00000000 11111111
-73&0xff 00000000 00000000 00000000 10110101 =181=B9
标签:11111111,进制,16,00000000,10110101,负数,73,字节 From: https://www.cnblogs.com/lqh969696/p/17406395.html