Java位操作:替换十六进制的半字节

时间:2012-09-06 14:52:58

标签: java bitwise-operators bit-shift

我必须为家庭作业编写这段代码,但我甚至不知道从哪里开始。这是我必须编写的方法的javadoc。

/**
* Sets a 4-bit nibble in an int

* Ints are made of eight bytes, numbered like so: 7777 6666 5555 4444 3333 2222 1111 0000
*
* For a graphical representation of this:
*   1 1 1 1 1 1                 
*   5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* |Nibble3|Nibble2|Nibble1|Nibble0|
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* 
* Examples:
*      setNibble(0xAAA5, 0x1, 0) //=> 0xAAA1
*      setNibble(0x56B2, 0xF, 3) //=> 0xF6B2
* 
* @param num int that will be modified
* @param nibble nibble to insert into the integer
* @param which determines which nibble gets modified - 0 for least significant nibble
*            
* @return the modified int
*/

这就是我所拥有的。我已经让它与javadoc中的第一个例子一起工作,但我知道这并不适用于所有情况。特别是当int为!= 0;

public static int setNibble(int num, int nibble, int which)
    {
    int newNibble = (num >> 4);
    newNibble = (newNibble << 4) | nibble;
    return newNibble;
    }

我是否应该轮班使用?我被告知我可以在一行代码中执行此方法。 感谢先进的帮助!

1 个答案:

答案 0 :(得分:5)

我建议你;

  • 通过构建蒙版并使用&
  • 提取要保留的位
  • 使用左移<<
  • 将要添加到正确位置的位置
  • 将它们与按位OR结合起来