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

149
例如,对于1、2、128、256,输出可以为(16位数字):
0000000000000001
0000000000000010
0000000010000000
0000000100000000

我尝试过

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

它会在左侧添加空格:

`               1'

如何使用0进行填充。我在Formatter文档中找不到相应的内容。还有其他方法吗?

P.S. 这篇文章介绍了如何在Java中使用左侧0填充格式化整数,但它并不适用于二进制表示。


你试过使用%016s吗? - Deniz Dogan
1
@Deniz 是的,它会失败并显示“Exception in thread "main" java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0”错误信息。 - khachik
看一下这个:https://dev59.com/NW855IYBdhLWcg3wNxgM#15124135 - fstang
17个回答

1

// 下面将处理正确的尺寸

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');
}

1
一个可行的朴素解决方案是:
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位字符串。

1
你可以使用库https://github.com/kssource/BitSequence。它接受一个数字并返回二进制字符串,可以进行填充和/或分组。
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

0
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");
    }
  }
}

1
numBnum相等,且在任何方面都没有不同。 - igorepst

0

这是一个老技巧,创建一个带有16个0的字符串,然后附加从String.format("%s", 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 );
    }
}

0

该方法将一个整数转换为字符串,长度为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<bits-size; i++ )
            sb.append('0');
        sb.append( bitString );
    }else
        sb = sb.append( bitString.substring(size-bits, size) );

    return sb.toString();
}

0
for(int i=0;i<n;i++)
{
  for(int j=str[i].length();j<4;j++)
  str[i]="0".concat(str[i]);
}

str[i].length() 是数字长度,例如二进制中的 2 是 01,长度为 2。 将 4 更改为所需的最大数字长度。这可以通过使用 continue 进行优化,时间复杂度为 O(n)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接