关于java读写二进制、十六进制、十进制的思考

参考表

251对应的进制转换:

进制各个进制对应数
十进制251
二进制11111011
十六进制fb

-5对应的进制转换:

进制各个进制对应数
十进制-5
二进制11111111111111111111111111111011
十六进制ff ff ff fb

思考:首先int型为整型,4个字节,每个字节为8位二进制位。所以251的完整写法为00000000000000000000000011111011(一共32位),只不过高位零去掉了。-5对应的也是11111111111111111111111111111011(认真数了,也是32位)。-2为11111111111111111111111111111110,负数和正数的对应关系不像十进制那样。
当我们定义这个方法时,

DataOutputStream out=new DataOutputStream(new
				BufferedOutputStream(new FileOutputStream(file)));

执行:

out.writeInt(-5); out.close();

则被写入的数字为:ff ff ff fb
但是如果:

out.writeByte(-5); out.close();

则被写入的为:fb(低八位,一个字节)

重点:

DataOutputStream out=new DataOutputStream(new
			BufferedOutputStream(new FileOutputStream(file)));
out.writeInt(-10); out.close();     
DataInputStream in=new DataInputStream(new
		BufferedInputStream(new FileInputStream(file)));
byte b=in.readByte();

System.out.println(b);

不管写入的是负几,只要高位是ff,输出的总是-1。因为-1的十六进制为ffffffff,其他负数的高位也是ff,我们读取一个byte,读到ff,但是system out 时默认是十进制输出的,高位会补f(重点!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值