Java中:byte转换为int ,int转换为long

1.byte转换为int
在Java语言中,byte 和 int都是有符号的,它们的数值都是用补码做计算的。
byte的数值范围是:-128 ~ +127 。高位为1表示负数,0表示正数。
如果在业务中遇到传输的数据是无符号的,就会存在问题。比如远程设备给我们传过来一个0xfe的数据:
0xfe,无符号的时候表示的是254,二进制为 11111110 。但是在Java程序里面,0xfe在byte中的值却表示的是-2 ,这就会出现问题。
如果用int数据类型来放0xfe,是没问题的。因为int虽然也是有符号的,但是它的表示范围为-2147483648到+2147483647,足够表示0xfe的值。
于是我们就需要byte转换为int做处理,需要注意的是,Java中扩展字节符号默认是不变的,也就是说高位补位全是1,需要做符号处理:

byte b = 0xfe;
int i = b;
i = i & 0xFF;

2.int转换为long
如果表示的范围超过了int的范围,同样也需要扩展,但是验证后发现使用&0xFFFFFFFF的方式并没用,需要使用其他的方法:

int k1 = 0xfeffffff;
long k11 = (k1 >>> 24) * 256 * 256 * 256L + ((k1 >>> 16) & 0xFF) * 256 *256 + ((k1 >>> 8) & 0xFF) *256 + (k1 & 0xFF);

或者

int k1 = 0xfeffffff;
long k12 = (k1 >>> 24) * 256 * 256 * 256L + (k1 & 0xFF0000) + (k1 & 0xFF00) + (k1 & 0xFF);

都可以实现正确地扩容,原来表示的无符号数据值可以保持相同的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值