Java的移位问题?

程序的目的是:把一个小于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);
}


幕布斯7119047
浏览 534回答 2
2回答

慕田峪9158850

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

牧羊人nacy

你的代码我放到C#里面执行,完全正常,基本无需改动即可运行,也可以正常还原,那么唯一的可能性就是你在“问题补充”里面说的可能不正确试试这样呢:private&nbsp;int&nbsp;getRecvCounter()&nbsp;{return&nbsp;(((int)ctrlbyte3)&nbsp;>>&nbsp;1)&nbsp;+&nbsp;(((int)ctrlbyte4)&nbsp;<<&nbsp;7); }重装过系统,java的环境暂时没时间配置,你自己先试试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java