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

在读取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 

提问者:恒10769 2018-07-17 11:51

个回答

  • qq_星河k_0
    2018-07-18 19:14:56
    已采纳

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

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