问答详情
源自:1-1 文件的编码

b已经是8位byte类型,为什么要用0xff来去掉前面的24位呢?

59b1fce8000157f612800720.jpg

哪句话是将b(byte类型)转换成int类型的. Integer.toHexString(b&0xff)  中, 括号里的b难道不是优先运算吗,这时候应该还是byte类型的吧,所有何来的必要将前面(按我的理解并不存在的)的24位去除呢,求大神指点,谢谢

提问者:慕村3124171 2020-07-27 17:52

个回答

  • 慕田峪9462102
    2020-07-30 18:45:25
    已采纳

    个人理解在for循环的时候把byte元素传到Integer.toHexString(b&0xff)的时候byte会自动转型成int类型,由于int类型是32位然后& 0xff 就是把前面24个0去掉只要低8位,最后打印出来的就是只保留低8位的形式

  • 慕雪9554338
    2022-06-25 18:18:45

    这是byte转化integer时出现的问题(因为用的是integer的方法),因为byte在java中是有正负的整数,所以转为integer是也是相应的整数,integer存储大小为4个字节,而byte为一个字节,存在相应扩展,负数是补码存储,所以是前面添1,正数是原码存储所以添0,最后转化为16进制数,前面的0省略,而1不能省略,所以通过&0xff取后八位有效位