java 二进制不足补0_如何在java中获得整数的0填充二进制表示?

如何在java中获得整数的0填充二进制表示?

例如,对于0,输出可以是(16位):

0000000000000001

0000000000000010

0000000010000000

0000000100000000

我试过了

String.format("%16s", Integer.toBinaryString(1));

它为左边填充放置空格:

` 1'

如何将0s用于填充。 我无法在Formatter中找到它。 还有另一种方法吗?

附: 这篇文章描述了如何使用左0填充格式化整数,但它不适用于二进制表示。

16个解决方案

167 votes

我认为这是一个次优的解决方案,但你可以做到

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

Samuel Parsonage answered 2019-07-28T21:12:25Z

18 votes

java.util.Formatter中没有构建二进制转换,我建议您使用String.replace将空格字符替换为零,如下所示:

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

或者实现自己的逻辑,将整数转换为二进制表示,并在此处给出的行中添加左填充。或者,如果您确实需要将数字传递给格式化,则可以将二进制表示形式转换为BigInteger,然后使用前导零格式化,但这在运行时非常昂贵,如:

String.format("%016d", new BigInteger(Integer.toBinaryString(1)))

Zoran Regvart answered 2019-07-28T21:12:56Z

11 votes

您可以使用Apache Commons StringUtils。 它提供了填充字符串的方法:

StringUtils.leftPad(Integer.toBinaryString(1), 16, '0');

Michal B answered 2019-07-28T21:13:19Z

8 votes

我正在尝试各种各样的方法调用,这些方法调用之前我还没有真正使用它们,它们取得了一定的成功,直到我想到了一些非常简单的东西,它可能会起作用,而且确实如此!

我确定之前已经考虑过它,不确定它对于长串二进制代码是否有用,但它适用于16Bit字符串。 希望能帮助到你!! (注意第二段代码得到改进)

String binString = Integer.toBinaryString(256);

while (binString.length() < 16) { //pad with 16 0's

binString = "0" + binString;

}

感谢Will帮助改进这个答案,使其无需循环。这可能有点笨拙但它有效,如果可以,请改进并评论....

binString = Integer.toBinaryString(256);

int length = 16 - binString.length();

char[] padArray = new char[length];

Arrays.fill(padArray, '0');

String padString = new String(padArray);

binString = padString + binString;

Tom Spencer answered 2019-07-28T21:13:57Z

6 votes

这是旧帖子的新答案。

要将具有前导零的二进制值填充到特定长度,请尝试以下操作:

Integer.toBinaryString( (1 << len) | val ).substring( 1 )

如果val和val = 1,

Integer.toBinaryString( (1 << len) | val )

返回字符串val,然后

"10001".substring( 1 )

抛弃第一个角色。 所以我们得到了我们想要的:

"0001"

如果val可能是负数,请尝试:

Integer.toBinaryString( (1 << len) | (val & ((1 << len) - 1)) ).substring( 1 )

Cr4paud answered 2019-07-28T21:14:55Z

3 votes

尝试...

String.format("%016d\n", Integer.parseInt(Integer.toBinaryString(256)));

我不认为这是#34;正确的#34; 这样做的方式......但它的工作原理:)

Paul answered 2019-07-28T21:15:26Z

3 votes

我不知道&#34;对&#34; 解决方案,但我可以建议你快速补丁。

String.format("%16s", Integer.toBinaryString(1)).replace(" ", "0");

我刚试过它,发现它工作正常。

AlexR answered 2019-07-28T21:15:57Z

3 votes

user3608934的一个简单版本的想法&#34;这是一个老技巧,用16 0创建一个字符串,然后附加你得到的修剪后的二进制字符串&#34;:

private String toBinaryString32(int i) {

String binaryWithOutLeading0 = Integer.toBinaryString(i);

return "00000000000000000000000000000000"

.substring(binaryWithOutLeading0.length())

+ binaryWithOutLeading0;

}

bento answered 2019-07-28T21:16:21Z

1 votes

一个天真的解决方案,工作将是

String temp = Integer.toBinaryString(5);

while (temp.length() < Integer.SIZE) temp = "0"+temp; //pad leading zeros

temp = temp.substring(Integer.SIZE - Short.SIZE); //remove excess

另一种方法是

String temp = Integer.toBinaryString((m | 0x80000000));

temp = temp.substring(Integer.SIZE - Short.SIZE);

这将产生整数5的16位字符串

proeng answered 2019-07-28T21:16:59Z

0 votes

这是一个老技巧,创建一个16 0&#s;然后附加从String.format(&#34;%s&#34;,Integer.toBinaryString(1))得到的修剪二进制字符串并使用右边的字符串 - 最多16个字符,删除任何前导0。 更好的是,创建一个函数,让您指定所需的二进制字符串的长度。 当然,可能还有很多其他方法可以实现这一目标,包括库,但我添加这篇文章来帮助朋友:)

public class BinaryPrinter {

public static void main(String[] args) {

System.out.format("%d in binary is %s\n", 1, binaryString(1, 4));

System.out.format("%d in binary is %s\n", 128, binaryString(128, 8));

System.out.format("%d in binary is %s\n", 256, binaryString(256, 16));

}

public static String binaryString( final int number, final int binaryDigits ) {

final String pattern = String.format( "%%0%dd", binaryDigits );

final String padding = String.format( pattern, 0 );

final String response = String.format( "%s%s", padding, Integer.toBinaryString(number) );

System.out.format( "\npattern = '%s'\npadding = '%s'\nresponse = '%s'\n\n", pattern, padding, response );

return response.substring( response.length() - binaryDigits );

}

}

user3608934 answered 2019-07-28T21:17:24Z

0 votes

我会用下面的方法编写自己的util类

public class NumberFormatUtils {

public static String longToBinString(long val) {

char[] buffer = new char[64];

Arrays.fill(buffer, '0');

for (int i = 0; i < 64; ++i) {

long mask = 1L << i;

if ((val & mask) == mask) {

buffer[63 - i] = '1';

}

}

return new String(buffer);

}

public static void main(String... args) {

long value = 0b0000000000000000000000000000000000000000000000000000000000000101L;

System.out.println(value);

System.out.println(Long.toBinaryString(value));

System.out.println(NumberFormatUtils.longToBinString(value));

}

}

输出:

5

101

0000000000000000000000000000000000000000000000000000000000000101

相同的方法可以应用于任何整数类型。 注意面具的类型

long mask = 1L << i;

Arseny Kovalchuk answered 2019-07-28T21:18:04Z

0 votes

此方法将int转换为String,length = bits。 填充0或最高有效位被截断。

static String toBitString( int x, int bits ){

String bitString = Integer.toBinaryString(x);

int size = bitString.length();

StringBuilder sb = new StringBuilder( bits );

if( bits > size ){

for( int i=0; i

sb.append('0');

sb.append( bitString );

}else

sb = sb.append( bitString.substring(size-bits, size) );

return sb.toString();

}

jenfax answered 2019-07-28T21:18:29Z

0 votes

您可以使用lib [https://github.com/kssource/BitSequence。]它接受一个数字并返回bynary字符串,填充和/或分组。

String s = new BitSequence(2, 16).toBynaryString(ALIGN.RIGHT, GROUP.CONTINOUSLY));

return

0000000000000010

another examples:

[10, -20, 30]->00001010 11101100 00011110

i=-10->00000000000000000000000000001010

bi=10->1010

sh=10->00 0000 0000 1010

l=10->00000001 010

by=-10->1010

i=-10->bc->11111111 11111111 11111111 11110110

Nikmass answered 2019-07-28T21:18:53Z

0 votes

for(int i=0;i

{

for(int j=str[i].length();j<4;j++)

str[i]="0".concat(str[i]);

}

str[i].length()是数字长度,二进制为2表示为01,长度为2将4更改为所需的最大数字长度。 这可以优化为O(n)。通过使用继续。

Jasmeet Chhabra answered 2019-07-28T21:19:18Z

0 votes

//下面将处理适当的尺寸

public static String binaryString(int i) {

return String.format("%" + Integer.SIZE + "s", Integer.toBinaryString(i)).replace(' ', '0');

}

public static String binaryString(long i) {

return String.format("%" + Long.SIZE + "s", Long.toBinaryString(i)).replace(' ', '0');

}

Paul Weiss answered 2019-07-28T21:19:43Z

0 votes

import java.util.Scanner;

public class Q3{

public static void main(String[] args) {

Scanner scn=new Scanner(System.in);

System.out.println("Enter a number:");

int num=scn.nextInt();

int numB=Integer.parseInt(Integer.toBinaryString(num));

String strB=String.format("%08d",numB);//makes a 8 character code

if(num>=1 && num<=255){

System.out.println(strB);

}else{

System.out.println("Number should be in range between 1 and 255");

}

}

}

Devesh Kumar answered 2019-07-28T21:20:00Z

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值