在讀取16進制數(shù) 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]結(jié)果為-1 ????????System.out.print("0"); ????} ????System.out.print(Integer.toHexString(buf[i]?&?0xff)+"?"); ????if(j++?%?10?==?0){ ????????System.out.println(); ????} }
文件的內(nèi)容為 A B?0x7fffffff?
2018-07-18
問題和代碼無關(guān),你只要輸出System.out.println(0xffffffff)就會得到-1;原因是int 是有符號位,占4個字節(jié),而0xffffffff是以int類型存儲的,int是有符號的。即1111 1111 1111.......第一位被用來記錄符號,所以這里就被解釋為負號了,而Java在編碼時,存儲的是負數(shù)的補碼,所以你的1111.....就成了1000......+1就是10000.....1就是-1啦。
所以16進制最大的數(shù)是0x7fffffff.