用Java打印二进制格式的整数

时间:2011-03-10 17:09:02

标签: java

我有一个号码,我想用二进制打印。我不想通过编写算法来实现它,Java中是否有内置函数?

21 个答案:

答案 0 :(得分:389)

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

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

请参阅Integer documentation

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

答案 1 :(得分:234)

这里不需要只依赖于二进制或任何其他格式...一个灵活的内置函数可用于打印你想要的程序中的任何格式.. 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

答案 2 :(得分:55)

System.out.println(Integer.toBinaryString(343));

答案 3 :(得分:21)

我需要一些东西来很好地打印出来并将每个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));
}

答案 4 :(得分:7)

旧学校:

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

答案 5 :(得分:5)

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

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

答案 6 :(得分:3)

这是打印整数的内部二进制表示最简单方法例如:如果我们将n取为17,那么输出将是: 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();
}

答案 7 :(得分:2)

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(0xFFFFFF & b)).replaceAll(" ", "0"));

}

输出:

i: 00000000000000000000000000001101
s: 0000000000001101
b: 00001101

答案 8 :(得分:2)

只需尝试一下。如果范围仅打印给定整数值的二进制值。它可以是正数或负数。

    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

答案 9 :(得分:1)

这个问题已经发布了很好的答案。但是,这是我自己尝试的方式(可能是最简单的逻辑基础→ 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

答案 10 :(得分:1)

使用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 

答案 11 :(得分:0)

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

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) - &gt;的&#34; 0B1&#34;

convertNumber(5) - &gt;的&#34; 0b101时&#34;

convertNumber(117) - &gt;的&#34; 0b1110101&#34;

工作原理: while循环向右移动一个数字(用倒数第二个替换最后一个数据等),得到最后一位的值并放置它在StringBuilder中重复,直到没有剩下的位(当a = 0时为止)。

答案 12 :(得分: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

    }

答案 13 :(得分:0)

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

Integer是32位 signed 数据类型,但Integer.toBinaryString()返回整数参数的字符串表示形式,作为base 2中的 unsigned 整数。

因此,Integer.parseInt(Integer.toBinaryString(X),2)可以生成异常(有符号与无符号)。

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

-11110100110

但它有效!!!

答案 14 :(得分:0)

尝试这种方式:

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

答案 15 :(得分:0)

给定int x的左边填充零的二进制表示:

 {
    {
          "name": "..dbcjjd",
          "value": "1.2.3.4",
          "path": "/",
          "domain": "abc.com",
          "expiry": "Aug 17, 292278994 12:42:55 PM",
          "isSecure": true,
          "isHttpOnly": false
     },
    {
          "name": "..dbcjjd",
          "value": "1.2.3.4",
          "path": "/",
          "domain": "abc.com",
          "expiry": "Jun 22, 2018 4:11:20 PM",
          "isSecure": true,
          "isHttpOnly": false
     }

    }

    Adding Cookie to driver:

     for(Cookie ck : cookieList)                            
    {
         Cookie newCookie = new Cookie(ck.getName(),ck.getValue(),domain, 
         ck.getPath(), ck.getExpiry(), ck.isSecure());                                                                  
         webDriver.manage().addCookie(newCookie);
    }   

答案 16 :(得分:0)

输入任何十进制数字作为输入。之后,我们将对模和除法进行运算,将给定的输入转换为二进制数。 这是将整数值转换为二进制的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());
    }
}

答案 17 :(得分:0)

简单,最简单的解决方案。

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.
}

答案 18 :(得分:0)

由于不接受任何答案,也许您的问题是关于如何在二进制文件中存储整数。 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();

答案 19 :(得分:0)

您可以使用位掩码(1 << k)并对数字进行AND操作! 1 << k在k位置只有一位!

if instance is None:
    # if we didn't get an instance, instantiate a new one
    self.instance = opts.model()
    object_data = {}

答案 20 :(得分:-2)

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

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