【发布时间】:2015-02-11 08:09:40
【问题描述】:
我有这个方法:
公共静态无效转储参数(字节b){ System.out.println("参数:" + Integer.toHexString(b)); System.out.println("参数 1:" + ((b & 0x01) >> 0)); System.out.println("参数 2:" + ((b & 0x02) >> 1)); System.out.println("参数 3:" + ((b & 0x0c) >> 2)); System.out.println("参数 4:" + ((b & 0xf0) >> 4)); }我试图用这种方法来扭转它:
公共静态字节 setParameters(int b1,int b2,int b3,int b4){ 字节结果=(字节)b1; 结果 |= (b2 | 0x02)像这样调用这些方法:
转储参数((字节)0xb2); 字节结果 = setParameters(0, 1, 0, 11); 转储参数(结果);结果:
参数:ffffffb2 参数 1:0 参数 2:1 参数 3:0 参数 4:11 参数:ffffffb6 参数 1:0 参数 2:1 参数 3:1 参数 4:11我感兴趣的结果以 ffffffb6 的值结束;我期待 ffffffb2。
setParameters 方法不起作用,为什么?
【问题讨论】:
-
我不认为你想
or反对一个常数。尝试使用result |= b2 << 1;等。 -
删除 0x0c 实例如何工作?转储方法对我的应用程序有效,这一点我很确定。
-
因为在这种情况下
result |= (b3 | 0x0c)按位或result反对52。据我所知,您只是想在位置 5 和 6 设置 2 位。