Java中的二进制数在printf打印时输出的为正负十进制,其换算关系详解
遇到的问题
从文件中取的二进制数据,本来想打印到控制台便于核对,结果发现大量取到的数据与文件原值不符。
byte[] byt = new byte[1];
System.out.println("in.read(byte)获得的值是" + byt[0]);
问题的原因:Java中的byte变量在转换为String类型输出其值时,实际计算方式。
正数的补码是自身,负数的补码是其绝对值按位取反再加1。
比如,byte a = -5,其原码表示为10000101
,注:最高位表示正负,0正数,1负数。
计算其反码为11111010
,注:首位符号位不参与反码计算。
再加1得11111011
,所以byte a = -5其在Java控制台打印时的值是-123。