Answers:
假设您的意思是“内置”:
int x = 100;
System.out.println(Integer.toBinaryString(x));
请参阅整数文档。
(Long
具有类似的方法,BigInteger
具有可在其中指定基数的实例方法。)
这里不需要仅依赖于二进制或任何其他格式...有一个灵活的内置函数可用,它可以在您的程序中打印所需的任何格式。
Integer.toString(100,8) // prints 144 --octal representation
Integer.toString(100,2) // prints 1100100 --binary representation
Integer.toString(100,16) //prints 64 --Hex representation
toBinaryString
使用二进制补码输出,toString
将数字指定的底数隐蔽,并在前面加上负号,因此toString(-8, 2) == "-1000"
我需要一些东西来很好地打印出来,然后将每个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));
}
result.replace(result.length() - 1, result.length(), "");
需要?当我们通过时int
,它已经是32位的。我们要在倒数第二行替换什么?
String
类的trim
函数来达到相同的效果。
public static void main(String[] args)
{
int i = 13;
short s = 13;
byte b = 13;
System.out.println("i: " + String.format("%32s",
Integer.toBinaryString(i)).replaceAll(" ", "0"));
System.out.println("s: " + String.format("%16s",
Integer.toBinaryString(0xFFFF & s)).replaceAll(" ", "0"));
System.out.println("b: " + String.format("%8s",
Integer.toBinaryString(0xFF & b)).replaceAll(" ", "0"));
}
输出:
i: 00000000000000000000000000001101
s: 0000000000001101
b: 00001101
看看这个逻辑可以将数字转换为任何基数
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 0000 0001 0001
void bitPattern(int n) {
int mask = 1 << 31;
int count = 0;
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();
}
只需尝试一下。如果范围仅是打印给定整数值的二进制值。它可以是正数或负数。
public static void printBinaryNumbers(int n) {
char[] arr = Integer.toBinaryString(n).toCharArray();
StringBuilder sb = new StringBuilder();
for (Character c : arr) {
sb.append(c);
}
System.out.println(sb);
}
输入
5
输出量
101
解决方案使用32位显示掩码,
public static String toBinaryString(int n){
StringBuilder res=new StringBuilder();
//res= Integer.toBinaryString(n); or
int displayMask=1<<31;
for (int i=1;i<=32;i++){
res.append((n & displayMask)==0?'0':'1');
n=n<<1;
if (i%8==0) res.append(' ');
}
return res.toString();
}
System.out.println(BitUtil.toBinaryString(30));
O/P:
00000000 00000000 00000000 00011110
简单,最简单的解决方案。
public static String intToBinaryString(int integer, int numberOfBits) {
if (numberOfBits > 0) { // To prevent FormatFlagsConversionMismatchException.
String nBits = String.format("%" + numberOfBits + "s", // Int to bits conversion
Integer.toBinaryString(integer))
.replaceAll(" ","0");
return nBits; // returning the Bits for the given int.
}
return null; // if the numberOfBits is not greater than 0, returning null.
}
对于这个问题,这里已经有很好的答案了。但是,这就是我自己尝试过的方式(可能是基于最简单的逻辑→ modulo / divide / add):
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
这个问题在Java(可能还有其他语言)中很棘手。
Integer是32位带符号数据类型,但是Integer.toBinaryString()返回整数参数的字符串表示形式,为基数2中的无符号整数。
因此,Integer.parseInt(Integer.toBinaryString(X),2)可以生成异常(有符号对无符号)。
安全的方法是使用Integer.toString(X,2); 这会产生一些不太优雅的东西:
-11110100110
但是它有效!!!
我认为这是迄今为止最简单的算法(对于那些不想使用内置函数的人):
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循环将数字右移(用倒数第二个代替最后一位,等等),获取最后一位的值并将其放入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
}
输入任何十进制数字作为输入。之后,我们进行模和除等运算,将给定的输入转换为二进制数。这是将整数值转换为二进制的Java程序的源代码,该二进制的位数为十进制数。Java程序已成功编译并在Windows系统上运行。程序输出也如下所示。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int integer ;
String binary = ""; // here we count "" or null
// just String binary = null;
System.out.print("Enter the binary Number: ");
integer = sc.nextInt();
while(integer>0)
{
int x = integer % 2;
binary = x + binary;
integer = integer / 2;
}
System.out.println("Your binary number is : "+binary);
System.out.println("your binary length : " + binary.length());
}
}
由于没有答案被接受,因此您的问题可能是关于如何在二进制文件中存储整数。您可能正在寻找java.io.DataOutputStream:https : //docs.oracle.com/javase/8/docs/api/java/io/DataOutputStream.html
DataOutputStream os = new DataOutputStream(outputStream);
os.writeInt(42);
os.flush();
os.close();
它使用强大的位操作来处理有符号和无符号值,并在左侧生成第一个零。
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();
}