A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭润生 中级黑马   /  2012-9-12 23:05  /  1286 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

想把一个数分别存在两个byte数组中,但好像有适用范围。比如我存得0x3c就能实现正确的转换,但我存得是0xff怎么变成-1了。求解释
class Test {
byte unit1;
byte unit2;
public static void main(String[] args) {
int counter=0x3c;
Test a=new Test();
a.setRecvCounter(counter);
System.out.println("counter = "+counter);
System.out.println("a.getRecvCounter() = "+a.getRecvCounter());
}
private int getRecvCounter() {
return (unit1 >> 1) + (unit2 << 8);
}
private void setRecvCounter(int recvcounter) {
unit1 = (byte) ((recvcounter << 1) & 0xff);
unit2 = (byte) ((recvcounter >> 8) & 0xff);
}
}

1 个回复

倒序浏览
当你传入的数据是0xFF时,调用setRecvCounter后,unit1就变成了0xFE了。unit2变成了0x00了,然后在返回语句分别移位后得到到的unit1就变成了是0xFF了(因为你的程序是带有符号右移的,所以最高位补1),unit2还是0x00,所以相加后还是0xFF,所以结果是-1;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马