嗨我想将一个长整数转换为二进制,但问题是我希望转换后得到一个固定的16位二进制结果,如果我将2转换为16位二进制它应该给我0000000000000010作为ans可以帮助我吗?
答案 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)
答案 7 :(得分:0)
如果你想要long的二进制表示,那么Long objet中有一个方法可以这样做:
String Long.toString(long i, int radix);
基数为2,你应该有一个二进制表示。
问候
纪尧姆