为了账号安全,请及时绑定邮箱和手机立即绑定

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

如题所示。

正在回答

4 回答

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

0 回复 有任何疑惑可以回复我~
#1

昵称是JaVa 提问者

非常感谢!
2017-05-22 回复 有任何疑惑可以回复我~

- -终于看懂了。点开源码看了下,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;
}


1 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

昵称是JaVa 提问者

b=in.read()可知,int b由一个字节转换而来,不可能是负数的吧。
2017-03-24 回复 有任何疑惑可以回复我~
#2

qq_顿首_0 回复 昵称是JaVa 提问者

只是举个例子,只取底八位可能改变值
2017-03-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信