1 问题描述
在java中使用DataInputStream类的readByte方法,当读入的是无符号并其值大于127时,读出的数是负数。这样给处理带来极大的不便。
2 解决办法
先byte b = DataInputStream.readByte();读入8位数字,然后在需要真实的byte值时,进行处理:int I = b & 0xff;这样i的值即byte原来真实的值。当然如果中间不需用byte变量,则直接可用用int I = DataInputStream. readUnsignedByte();
3 解决原理
Java中byte是8位有符号数,即其值最大为127,当读入的值大于127时,java就会把最高位当成符号位,例如当读入11110001(241)时,其byte值为-15。所以当要真实值时,则要告知java其最高位不是符号位。
4 附加说明
二进制运算在计算机中的处理方法:二进制表示和加减都是通过补码进行的。
正数的补码是其自身,负数的补码是正数补码取反后加1。
如:-15的计算机表示是:15(00001111),取反:11110000,然后再加1:11110001
如果byte读入的是241(11110001),则计算机则以为是 -15。