java基本数据类型转换

java基本数据类型转换,看似简单,可很多人在工作编程中却会放错误,原因是对它的机制理解的不够

我这里以byte,int之间转换为例,进行说明

理解基本数据类型转换,首先得理解java的负数表示,java负数使用补码的方式表示,也就是说一个byte数,0x80,它的值是-128,而0xFF,表示-1,关于补码,大学基础课,我就不多说了

1.byte转换成int

byte转换成int数据变长了,原来一个字节变成了4个字节

java转换规则是这样的,后面扩充的3个字节填值跟byte的符号位值相同,符号位为1,就填充1,符号位为0,就填充0,以0x80为例,转换成int后就变成了0xFFFFFF80,根据补码取反加1的规则,该int的值依然是-128,若是0x70,转换成int后就变成了0x00000070,该int的值依然是127,也就是说,从byte转换成int,数据的值不发生变化。

2.int转换成byte

int转换成byte很简单,就是简单去掉int的高三位,这样处理后,就可能产生一些变换,例:int x = 128,int y=-128,你把它转换成byte它的值都变成了-128,就是这个机制导致的

 

我写两个简单例子用于说面上面两个问题:

 public void testbyte(){
  byte x = 0;
  for(int i=0;i<256;i++){
   System.out.println(x++);
   System.out.println((int)x);
  }
  //结论1:java负数使用补码表示,比如0x80表示-128
  //补码的运算规则是取反加一
  //结论2:当byte转换成int,高位填充数值要看符号位,符号位为1,就填充1,符号位为0就填充0
  
 }
 public void testint2byte(){
  int x = -128;
  int y = 128;
  System.out.println((byte)x);
  System.out.println((byte)y);
  //结论:java int强制转换成byte就是简单截取高位数据
 }

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值