在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(); }