黑马程序员技术交流社区

标题: 位移的疑问 [打印本页]

作者: 彭润生    时间: 2012-9-12 23:05
标题: 位移的疑问
想把一个数分别存在两个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);
}
}

作者: 何明辉    时间: 2012-9-12 23:33
当你传入的数据是0xFF时,调用setRecvCounter后,unit1就变成了0xFE了。unit2变成了0x00了,然后在返回语句分别移位后得到到的unit1就变成了是0xFF了(因为你的程序是带有符号右移的,所以最高位补1),unit2还是0x00,所以相加后还是0xFF,所以结果是-1;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2