java二进制使用深入理解(二进制十进制转换精度损失)

文章目录

System.out.println("测试byte的范围:");
byte byte_127=127;
//byte byte_128=128;//报错
byte byte_m128=-128;
//byte byte_m129=-129;//报错
System.out.println("说明byte的范围是-128~127\n");

System.out.println("测试相互转换:低转高无需强转(超范围也需要强转),高转低需要强转");
byte byte_m129= (byte) -129;//超范围后int强转byte
int int_byte_m129=byte_m129;//强转的结果再赋给int
System.out.println("-129从int到b再到int:"+int_byte_m129);//结果为127;
// -129的编码如下:
// 原码 1000 0000,0000 0000,0000 0000,1000 0001
// 反码 1111 1111,1111 1111,1111 1111,0111 1110
// 补码 1111 1111,1111 1111,1111 1111,0111 1111
// 强转为byte后,直接截断   0111 1111 ,再转为int就是127
System.out.println("byte转为int:"+(int)byte_m128);//-128,说明byte转int会正常转换,低精度转成高精度的结果不会出错
// byte的-128补码: 1000 0000
// 转int后,左面拿符号位填充(右面0) 1111 1111,1111 1111,1111 1111,1000 0000
// 补码求补码等于原码
// 反码:1000 0000,0000 0000,0000 0000,0111 1111
// 原码:1000 0000,0000 0000,0000 0000,1000 0000  ==-128


System.out.println("Byte常用方法:");
//1.toString
//直接输出byte对象实际是调用的toString,而byte的toString是先将byte转成int,然后调用int的toString
//Byte.toString(byte b) {return Integer.toString((int)b, 10);}

//2.字符串转字节:parseByte(字符串,基数)
Byte k=Byte.parseByte("01111111",2);
// 源码只调用了 Integer.parseInt(string, radix);,有范围检查,只能输入0000 0000~0111 1111,最高位不能是1(bug)
System.out.println("字节码01111111:"+k);//127,符合预期
//Byte k1=Byte.parseByte("11111111",2);//报错,超范围,Integer.parseInt()后结果是255,超过范围-128~127,这应该是jdk的一个bug
//int k1=Integer.parseInt("11111111",2);//255
//为了解决任意字符串转字节,可以如下使用
byte t = (byte)Integer.parseInt("11111111", 2);//参数为原码,求反10000000,求补10000001,即-1
System.out.println(t);

//3.十进制转字节码字符串
String s1 = Integer.toBinaryString(-128);
System.out.println("-128的字节码字符串:"+s1);//11111111111111111111111110000000
//byte b1=Byte.parseByte(s1,2);//报错,Byte为8bit,给定32bit解析不了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值