我试图从此输入00000000000000101
获取以下结果5
。
这是我的代码,它没有意义:
public static int get16Bits(int x)
{
System.out.println((x & 0xffff) - ((x & 0x8000) << 1));
return (x & 0xffff) - ((x & 0x8000) << 1);
}
如何获得整数值的 16bits ?
答案 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')