黑马程序员技术交流社区
标题:
baos.write(200)向输入流中写入的怎么不是 200
[打印本页]
作者:
不抛弃不放弃
时间:
2013-11-11 00:58
标题:
baos.write(200)向输入流中写入的怎么不是 200
我向输出流中写入200,但读取输入流中的内容时,发现是-56,这是怎么回事?
public static void main(String []args){
ByteArrayOutputStream baos= new ByteArrayOutputStream();
baos.write(200);
System.out.println(Arrays.toString(baos.toByteArray()));
}
作者:
零下五度的水
时间:
2013-11-11 01:35
你该知道你用的是 ByteArray 的输出流吧,byte 是 -128~127的
127之后是-128,然后不停的++,自己算吧
作者:
文涛
时间:
2013-11-11 01:57
因为你使用了ByteArray,这个数组流每个单位为字节,就是8位,也就是8个2进制位,八个2进制位一共可以表示256个数字,第一位用来表示正负,0为正,1为负,8位全部为0就表示0,符号位为1,其他为0就表示-128,所以该数字的范围就是-128到127,加上0刚刚256个数字。
这里就很明显了,最大的正数只能到127,你超出了范围,于是产生了溢出,溢出的时候会循环计数,也就是说,如果你的数字是128那么实际上就是溢出了一个,就成了-128,如果溢出了两个,例如数字129就是-127,当你溢出了73个的时候,那么数字就是-128+73-1=-56,所以明显你输出的就是-56
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2