没有合适的资源?快使用搜索试试~ 我知道了~
首页java byte相互转换详解左右位移
资源详情
资源评论
资源推荐

2018/8/6 javabyte转int互相转换原理详解CSDN博客
https://blog.csdn.net/wojiuai2093/article/details/50779879 1/3
原
javabyte转int互相转换原理详解
2016年03月02日14:56:34 阅读数:6648
inti=0;
i+=((b[0]&0xff)<<24);
i+=((b[1]&0xff)<<16);
i+=((b[2]&0xff)<<8);
i+=((b[3]&0xff));
想必大家对这样的代码并不陌生,明白就可以不看了,想了解的继续往下看,不好的地方还请多多包涵!
个人经常看到这样的写法但是不明白为何,所以忽然想了解下于是研究了下.
有一定的计算机2进制计算基础的就可以看明白,如果不明白2进制,先去看看计算机2进制计算及转换之类的东西
===========开始...
原码,反码,补码概念
+1原=00000001
1原=10000001
反码
正数的反码是其本身
负数的反码是在其原码的基础上,符号位不变,其余各个位取反.
补码
正数的补码就是其本身
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1.(即在反码的基础上+1)
一部分int转byte
java采用[补码]存储整数int型为4字节32位,byte为1字节8位
所以byte[]数组中存储一个int类型肯定是4个1字节的byte组成,即byte[4]才可以存放一个int值
就算int是0在计算中也是占用个32位表示:00000000000000000000000000000000存入byte中即4个下标中均为0
int直接存入byte数组中及原理:
inta=1246;
二进制表示
|高16位||低16位|
00000000000000000000010011011110
|A||B||C||D|
[0][1][2][3]放入byte[]数组原理,将这个2进制以8位为1个字节存入byte数组中从数组下标0开始存入
最后byte[]数组存储为这样
[0]=00000000补码后00000000转10进制真实数值0
[1]=00000000补码后00000000转10进制真实数值0
[2]=00000100补码后00000100转10进制真实数值4
[3]=11011110补码后10100010转10进制真实数值34,
最后8位11011110最高位是符合位,1负0正,补码规则:符号位不变,其余各位取反,
最后+1得到:101000100100010=34+负号"1"所以=34
转换过程中进行&运算就是高位舍去,通俗就是不需要的数据清0处理,下面琢行说明:
由于byte只有8位,int32位,所以我们需要位移,把前面的每8位一组移动到最后8位上面来进行计算,其他数值都不参与计算
inta=1246;
byte[]b=newbyte[4];
第一步:
b[0]=(byte)(a>>24&0xff);
将00000000000000000000010011011110A区域移动到D区域往右边推动24位,主要获取A取的值
00000000000000000000010011011110
00000000000000000000010011011110形成这样的
空白的数据被抹掉就是0表示,移动后超出了D区域数据属于溢出情况也舍掉最后形成如下
00000000000000000000000000000000
最后做&计算,这里移动了24位,右边的数据都被溢出了,做不做这个计算都没影响,还是表示下
00000000000000000000000000000000

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1