如何将长整数转换为固定长度的16位二进制字符串?

时间:2010-04-12 09:37:58

标签: java

嗨我想将一个长整数转换为二进制,但问题是我希望转换后得到一个固定的16位二进制结果,如果我将2转换为16位二进制它应该给我0000000000000010作为ans可以帮助我吗?

8 个答案:

答案 0 :(得分:21)

你最想要的是Integer.toBinaryString(),并结合某些东西来确保你得到16个地方:

int val = 2;
String bin = Integer.toBinaryString(0x10000 | val).substring(1);

这里的想法是通过在值的第17位放置1来获得零填充,然后使用String.substring()来切断它创建的前导1,从而总是给出正好16个二进制数字。 (当然,只有在您确定输入是16位数时才有效。)

答案 1 :(得分:4)

我假设你想要一个固定长度的字符串输出(16)。这是代码的样子:

String binarized = Integer.toBinaryString(i);
int len = binarized.length();
String sixteenZeroes = "00000000000000000";
if (len < 16)
  binarized = sixteenZeroes.subString(0, 16-len).concat(binarized);
else
  binarized = binarized.subString(len - 16);
return binarized;

警告:我没有编译或运行它,所以请确保没有错误:)

答案 2 :(得分:3)

与此处的许多建议相反:Integer.toBinaryString,不适用于16位(短)并且它不会打印前导零。原因是(顾名思义)这只适用于整数。对于负数,位表示将改变(第一位表示负数)。下面的两个数字表示相同的数字,简称为int。因此,如果您想表示您收到的原始位(这是您的问题的一般应用),此函数将生成奇怪的输出。

decimal: -3
short:                     1111 1111 1111 1101
int:   1111 1111 1111 1111 1111 1111 1111 1101

编辑:更改了上面的数字

因此,如果你对这一点感兴趣,你就不能投短。

Java不提供简短的实现,因此您必须提供自己的实现。像这样的东西(大小是位数):

int displayMask = 1 << (size - 1);
StringBuffer buf = new StringBuffer( size);
for ( int c = 1; c <= size; c++ ) 
{
    buf.append( ( value & displayMask ) == 0 ? '0' : '1' );
    value <<= 1;
}

答案 3 :(得分:1)

Integer.toBinaryString会将int转换为字符串的二进制表示形式。

它没有给你前导零,所以如果你真的需要字符串来获得那些并且是16位,你可以自己添加它们。

你应该知道如何做到这一点。


请注意,int实际上是Java中的32位。你也应该知道两个补码是如何工作的。例如,-1的二进制表示为32 1 s。

答案 4 :(得分:1)

就将base10数转换为二进制数的算法而言,我个人认为以下内容非常简单:

char[] array;

for (i; i < 16; i++)
{
    if (yourNumber % 2 == 0)
          array[16-i] = '0';
    else if (yourNumber % 2 == 1)
          array[16-i] = '1';
    yourNumber = yourNumber / 2;
}

如果愿意,可以将char数组转换为String。

答案 5 :(得分:1)

我必须以32位数字进行操作,最后得到:

String stringWord = Long.toBinaryString(word);
while (stringWord.length() < 32) // ensure that length of word is 32
        stringWord = "0" + stringWord;

答案 6 :(得分:0)

Binary是一种表示形式,而不是将整数转换为的格式。例如,如果您有一个整数:

int i = 2;

二进制表示将是00000010.Java只有有符号整数,所以这个link会有所帮助。

答案 7 :(得分:0)

如果你想要long的二进制表示,那么Long objet中有一个方法可以这样做:

String Long.toString(long i, int radix);

基数为2,你应该有一个二进制表示。

问候
纪尧姆