为了账号安全,请及时绑定邮箱和手机立即绑定

Java的移位问题?

Java的移位问题?

幕布斯7119047 2018-12-04 18:12:22
程序的目的是:把一个小于0x7FFF的数存放在两个byte字节里(setRecvcounter方法);       需要时从两个byte字节中还原这个int型数据(getRecvcounte方法);问题:为何这个程序在输出时,有时是对的有时不对,比如counter=0x1234,可以还原,counter=0x3773,无法还原,问题出在哪里?class Test {byte ctrlbyte3;byte ctrlbyte4;public static void main(String[] args) {int counter=0x7fff;Test a=new Test();a.setRecvCounter(counter);System.out.println("counter = "+counter);System.out.println("a.getRecvCounter() = "+a.getRecvCounter());}private int getRecvCounter() {return (ctrlbyte3 >> 1) + (ctrlbyte4 << 7);}private void setRecvCounter(int recvcounter) {ctrlbyte3 = (byte) ((recvcounter << 1) & 0xff);ctrlbyte4 = (byte) ((recvcounter >> 7) & 0xff);}
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

把ctrlbyte3、ctrlbyte4转换成int后再 >> 1 << 7.

查看完整回答
反对 回复 2018-12-08
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

你的代码我放到C#里面执行,完全正常,基本无需改动即可运行,也可以正常还原,那么唯一的可能性就是你在“问题补充”里面说的可能不正确

试试这样呢:

private int getRecvCounter() {return (((int)ctrlbyte3) >> 1) + (((int)ctrlbyte4) << 7);
}

重装过系统,java的环境暂时没时间配置,你自己先试试。


查看完整回答
反对 回复 2018-12-08
  • 2 回答
  • 0 关注
  • 520 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信