当前位置: 首页 > 知识库问答 >
问题:

如何反转位移位方法

云季同
2023-03-14

我有这个方法:

public static void dumpParameters(byte b) {
    System.out.println("Parameters: " + Integer.toHexString(b));
    System.out.println("Param 1: " + ((b & 0x01) >> 0));
    System.out.println("Param 2: " + ((b & 0x02) >> 1));
    System.out.println("Param 3: " + ((b & 0x0c) >> 2));
    System.out.println("Param 4: " + ((b & 0xf0) >> 4));
}

我试着用这个方法颠倒过来:

public static byte setParameters(int b1, int b2, int b3, int b4) {
    byte result = (byte) b1;
    result |= (b2 | 0x02) << 1;
    result |= (b3 | 0x0c) << 2;
    result |= (b4 | 0xf0) << 4;
    return result;
}

这样调用这些方法:

dumpParameters((byte) 0xb2);
byte result = setParameters(0, 1, 0, 11);
dumpParameters(result);

结果:

Parameters: ffffffb2
Param 1: 0
Param 2: 1
Param 3: 0
Param 4: 11
Parameters: ffffffb6
Param 1: 0
Param 2: 1
Param 3: 1
Param 4: 11

我感兴趣的结果最终得到的值为FFFFFFB6;我需要FFFFFFB2

setParameters方法不起作用,为什么?

共有2个答案

梁磊
2023-03-14

这是我想你要得到的代码:

public static byte setParameters(int b1, int b2, int b3, int b4) {
    byte result = (byte) b1;
    result |= (b2 & 0x01) << 1;
    result |= (b3 & 0x03) << 2;
    result |= (b4 & 0x0f) << 4;
    return result;
}
赵奕
2023-03-14

按位或将完全破坏参数,只需将其移位,然后取所需的位:

public static byte setParameters(int b1, int b2, int b3, int b4) {
    byte result = (byte) b1;
    result |= (b2 << 1) & 0x02;
    result |= (b3 << 2) & 0x0c;
    result |= (b4 << 4) & 0xf0;
    return result;
}
 类似资料:
  • 1E 1B 01 13 6 [ 0001 1110 0001 1011 0000 0001 0001 0011 0110 ]通过进行筛选和加成转换为F6C336。(0x1E 现在,我不得不逆转这一计算。即从F6C336,我想得到1E 1B 01 13 6。 很抱歉我在位操作方面的知识很差。

  • 代码: 我想在不使用任何循环的情况下反转一个数字,我包括了到目前为止的步骤,但我不确定它是否正确: 将int与输出一起声明为num1、num2和num3,反向 这些步骤正确吗?我试着使用这个程序,但没有任何运气,直到我得到正确的步骤。 例子: 数字总是3位数,没有任何变化

  • 我目前正在学习位操作,我的任务是做一个左旋转的4位整数。 我的4位左旋转代码是 我想做一个4位循环移位,以保持作为一个4位后旋转,但似乎不能理解它是如何工作的。 例如:10(1010)左旋转1位后给出5(0101),但它给出的值是21,比我的4位多。 任何能让我理解这个问题的帮助都将不胜感激!

  • 问题内容: 给定一个十进制整数(例如65),如何反转Python中的基础位?即。以下操作: 看来该任务可以分为三个步骤: 将十进制整数转换为二进制表示形式 反转位 转换回十进制 步骤#2和3似乎很简单(这个相关的步骤#2 SO问题),但我卡在步骤#1。步骤#1的问题是使用填充零来检索完整的十进制表示形式(即65 = 01000001,而不是1000001)。 我到处搜寻,但似乎找不到任何东西。 问

  • 本文向大家介绍java<<、>>、>>>移位操作方法,包括了java<<、>>、>>>移位操作方法的使用技巧和注意事项,需要的朋友参考一下 <<,有符号左移位,将运算数的二进制整体左移指定位数,低位用0补齐。 以上是正整数,运算结果如下。 接下来看看将负数进行左移2位操作是什么情况,运算结果如下。 为什么会-10的二进制会出现这么多的1呢?仔细数一下刚好有32位。首先需要了解的是Java负数存储是

  • 我必须编写一个函数,对y位置的位进行左循环移位。例如,如果我将:01011000和2作为y,则函数必须返回011000001。 我已经尝试使用但它似乎是无用的。