在Java中打印二进制格式的整数

例如:我有一个号码,我想用二进制打印。 我不想通过编写一个algorithm来做到这一点,而是我想要使用一个内置函数。

假设你的意思是“内置的”:

int x = 100; System.out.println(Integer.toBinaryString(x)); 

请参阅Integer文档 。

Long有一个类似的方法, BigInteger有一个实例方法,你可以指定基数。)

这里不需要只依赖于二进制或任何其他格式…一个灵活的内置函数可用在您的程序打印无论你想要的格式.. Integer.toString(int,representation);

 Integer.toString(100,8) // prints 144 --octal representation Integer.toString(100,2) // prints 1100100 --binary representation Integer.toString(100,16) //prints 64 --Hex representation 
 System.out.println(Integer.toBinaryString(343)); 

我需要一些很好的东西打印出来,每隔n位分开一次。 换句话说,显示前导零并显示如下所示:

 n = 5463 output = 0000 0000 0000 0000 0001 0101 0101 0111 

所以这是我写的:

 /** * Converts an integer to a 32-bit binary string * @param number * The number to convert * @param groupSize * The number of bits in a group * @return * The 32-bit long bit string */ public static String intToString(int number, int groupSize) { StringBuilder result = new StringBuilder(); for(int i = 31; i >= 0 ; i--) { int mask = 1 << i; result.append((number & mask) != 0 ? "1" : "0"); if (i % groupSize == 0) result.append(" "); } result.replace(result.length() - 1, result.length(), ""); return result.toString(); } 

像这样调用它:

 public static void main(String[] args) { System.out.println(intToString(5463, 4)); } 

老套:

  int value = 28; for(int i = 1, j = 0; i < 256; i = i << 1, j++) System.out.println(j + " " + ((value & i) > 0 ? 1 : 0)); 

看看这个逻辑可以将数字转换为任何基数

 public static void toBase(int number, int base) { String binary = ""; int temp = number/2+1; for (int j = 0; j < temp ; j++) { try { binary += "" + number % base; number /= base; } catch (Exception e) { } } for (int j = binary.length() - 1; j >= 0; j--) { System.out.print(binary.charAt(j)); } } 

要么

 StringBuilder binary = new StringBuilder(); int n=15; while (n>0) { if((n&1)==1){ binary.append(1); }else binary.append(0); n>>=1; } System.out.println(binary.reverse()); 

这是打印整数的内部二进制表示最简单的方法例如 :如果我们取n为17那么输出将是: 0000 0000 0000 0000 0000 0000 0001 0001

 void bitPattern(int n) { int mask = 1 << 31; while(mask != 0) { if(count%4 == 0) System.out.print(" "); if((mask&n) == 0) System.out.print("0"); else System.out.print("1"); count++; mask = mask >>> 1; } System.out.println(); } 

在java中这个问题很棘手(也可能在其他语言中)。

Integer是一个32位有符号数据types,但Integer.toBinaryString()返回一个整数参数的string表示forms,以2为底的无符号整数。

所以,Integer.parseInt(Integer.toBinaryString(X),2)可以产生一个exception(signed与unsigned)。

安全的方法是使用Integer.toString(X,2); 这会产生一些不太优雅的东西:

-11110100110

但它的作品!

我认为这是迄今为止最简单的algorithm(对于那些不想使用内置函数的人):

 public static String convertNumber(int a) { StringBuilder sb=new StringBuilder(); sb.append(a & 1); while ((a>>=1) != 0) { sb.append(a & 1); } sb.append("b0"); return sb.reverse().toString(); } 

例:

convertNumber(1) – > “0b1”

convertNumber(5) – > “0b101”

convertNumber(117) – > “0b1110101”

它是如何工作的: while循环向右移动一个数字(用倒数第二位replace最后一位等等),获取最后一位的值并将它放在StringBuilder中,重复直到没有剩下位(这是A = 0)。

  for(int i = 1; i <= 256; i++) { System.out.print(i + " "); //show integer System.out.println(Integer.toBinaryString(i) + " "); //show binary System.out.print(Integer.toOctalString(i) + " "); //show octal System.out.print(Integer.toHexString(i) + " "); //show hex } 

试试这个方法:

 public class Bin { public static void main(String[] args) { System.out.println(toBinary(0x94, 8)); } public static String toBinary(int a, int bits) { if (--bits > 0) return toBinary(a>>1, bits)+((a&0x1)==0?"0":"1"); else return (a&0x1)==0?"0":"1"; } 

}

10010100

这个问题已经在这里发布了很好的答案。 但是,这是我自己尝试的方式(也可能是最简单的基于逻辑→ 模/分/加 ):

  int decimalOrBinary = 345; StringBuilder builder = new StringBuilder(); do { builder.append(decimalOrBinary % 2); decimalOrBinary = decimalOrBinary / 2; } while (decimalOrBinary > 0); System.out.println(builder.reverse().toString()); //prints 101011001 

它使用有符号和无符号值进行强大的位操作,并生成左边的第一个零。

 public static String representDigits(int num) { int checkBit = 1 << (Integer.SIZE * 8 - 2 ); // avoid the first digit StringBuffer sb = new StringBuffer(); if (num < 0 ) { // checking the first digit sb.append("1"); } else { sb.append("0"); } while(checkBit != 0) { if ((num & checkBit) == checkBit){ sb.append("1"); } else { sb.append("0"); } checkBit >>= 1; } return sb.toString(); }