课程
/后端开发
/Java
/文件传输基础——Java IO流
代码中,为什么要用b&0xff去掉前面的24个0呢?b是byte类型,本身就只有8位啊
2017-09-08
源自:文件传输基础——Java IO流 1-1
正在回答
我也没明白,感觉他们的回答没有理解你的意思,是说b是byte类型的什么时候转换成int类型的了,既然已经是byte类型只有8位那为什么要进行去掉前面24位的操作呢
正如你所说,byte只有8位,然后int有32位,所以byte转换为int,int的前面24位是无意义的(就是跟转换过来的值无关),所以0xff=0000 0000 0000 0000 0000 0000 1111 1111 & b可以保留后8位的数值,前面24位不管是0还是1都会为0不显示。
因为Integer.toHexString()方法,此方法返回的字符串表示的无符号整数参数所表示的值以十六进制(基数为16)。谢谢
将byte转换为int 高24位会补1 0xff的二进制表示是11111111 高二十四位补0 所以0&1为0 这样就去掉了int的高24位的字节
你试试不加。就有可能变成:ffffffc4
正如你所说,byte只有8位,我们也只需要用到8位
加上0xff就可以把后面2位(即8位)留下c4,前面补0
为了只截取后面8位。
16k闪存大脑3954634 提问者
举报
为您介绍IO流的使用,以及对象的序列化和反序列化的内容
2 回答为什么toHexString()里要加&0xff?是什么意思?
1 回答0xff什么意思?
1 回答0xff的作用
2 回答b已经是8位byte类型,为什么要用0xff来去掉前面的24位呢?
5 回答为什么4-1中的例子补0,不需要&0xff,但是用字节数组byte[i]比较的时候要&0xff