问答详情
源自:4-1 字节流之文件输入流FileInputStream-1

11分22秒while((b=in.read())!=-1){System.out.print(integer.toHexString(b)+" ")}为什么b不进行&0xff? b为int型

如题所示。

提问者:昵称是JaVa 2017-03-23 21:04

个回答

  • 落叶萧萧online
    2017-04-16 16:08:57
    已采纳

    b这里可以不进行&0xff,因为源码里已经进行了该操作,另外我们读取的本身就是一个字节,所以只取低八位不会改变原来的结果,只是输出形态会有区别。

  • 落叶萧萧online
    2017-04-16 16:05:24

    - -终于看懂了。点开源码看了下,read()单独往int里读的那个,就是我们第一次写的方法里,输出的数已经是&0xff 在源码中进行了这个操作,所以直接就可以转换成16进制输出。还有前面补0的那个操作,当小于或等于15时前面添加字符0,可以直接进行。但是我再read(数组,起始位,长度)这个方法时,出现问题,所以自己补了&0xff的操作,结果就一致了。。。更改了两个地方。buf[i]&0xff)<=0xf 还有  Integer.toHexString(buf[i]&0xff)+" "

    下面是源码

    public int read() throws IOException {
        if (eof) {
            return -1;
        }
        temp = new byte[1];
        int n = read(temp, 0, 1);
        if (n <= 0) {
            return -1;
        }
        return temp[0] & 0xff;
    }


  • 落叶萧萧online
    2017-04-16 15:39:08

    这儿我也觉得应该进行与操作啊,b是int型,不进行与操作输出就是32位的了。。但是看课程上好像没有问题。

  • qq_顿首_0
    2017-03-23 22:37:05

    int类型数据,4个字节,如果有符号的整数且整数为负数,那么最高为是为1的,如果只取低八位是不行的,值会改变,如果整数数值很小(底八位能够表示)且高位符号位为0即整数为正整数,可以这样操作       希望有帮助呢~