位级操作,从短值获得一点

时间:2017-09-22 12:44:29

标签: java integer bit 16-bit

我试图从此输入00000000000000101获取以下结果5

这是我的代码,它没有意义:

public static int get16Bits(int x)
    {
        System.out.println((x & 0xffff) - ((x & 0x8000) << 1));
        return (x & 0xffff) - ((x & 0x8000) << 1);

    }

如何获得整数值的 16bits

4 个答案:

答案 0 :(得分:6)

尝试稍微改变你的return语句:

// Consent Spinner Error set up
    Boolean no_error;
    TextView errorText = (TextView)mspinnerPatientConsent.getSelectedView();
    if (mspinnerPatientConsent.getSelectedItem().toString().contains("No"));{
        errorText.setText("Patient Must Consent to Be Registered");
        errorText.setError("");
    }
    if (mspinnerPatientConsent.getSelectedItem().toString().contains(" "));{
        errorText.setText("Patient Must Consent to Be Registered");
        errorText.setError("");
        no_error = false;
    }

这应该对你有帮助。

答案 1 :(得分:5)

第一部分是不言自明的:通过& 0xffff掩蔽删除了高16位。

减去(x & 0x8000) << 1是一种技巧,可以在32位结果中保持16位数的正确符号:例如,0xffff,16位表示中的-1,转换为到0xffffffff,在32位表示中也是-1。这比使用条件更好,因为它是无分支的。

您可以使用的另一个技巧是

(((x & 0xFFFF) << 16) >> 16)

这使得16位数的符号位“触摸”32位数的符号位,让右移对符号扩展结果。

注意:如果您要查找数字的二进制String表示,则只需要x & 0xffff屏蔽,因为从字符串结果中删除了高16位无论如何。 This Q&A解释了如何获得具有适当前导零数的整数的二进制表示。

答案 2 :(得分:1)

我们可以尝试下面的代码,我们将使用for循环:

public void getBits(int number){

      String bits = "";
      for (int i = 0; i < 16; i++) {
          bits = (number & 1) + bits;
          number >>= 1;
      }
      System.out.println("The bits are " + bits);
  }

答案 3 :(得分:0)

尝试以下:

String.format("%16s", Integer.toBinaryString(5)).replace(' ', '0')