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

在读取16进制数 0x7fffffff时,buf[i]的值为-1,为什么

byte[] buf = new byte[8 * 1024];
int bytes = in.read(buf,0,buf.length);
int j=1;
for (int i = 0; i < bytes; i++){
    if ((buf[i] & 0xff) <= 0xf){                    //此处 如果没有进行与运算,直接打印buf[i]结果为-1
        System.out.print("0");
    }
    System.out.print(Integer.toHexString(buf[i] & 0xff)+" ");
    if(j++ % 10 == 0){
        System.out.println();
    }
}

文件的内容为 A B 0x7fffffff 

正在回答

1 回答

问题和代码无关,你只要输出System.out.println(0xffffffff)就会得到-1;原因是int 是有符号位,占4个字节,而0xffffffff是以int类型存储的,int是有符号的。即1111 1111 1111.......第一位被用来记录符号,所以这里就被解释为负号了,而Java在编码时,存储的是负数的补码,所以你的1111.....就成了1000......+1就是10000.....1就是-1啦。

所以16进制最大的数是0x7fffffff.

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

恒10769 提问者

懂了,感谢
2018-07-19 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

在读取16进制数 0x7fffffff时,buf[i]的值为-1,为什么

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