黑马程序员技术交流社区
标题:
位移的疑问
[打印本页]
作者:
彭润生
时间:
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